pow运算的都是实型 你肯定是字符转整形在转实型运算是计算机存储上发生了变化 例如5.689×1000输出整形为5688 因为计算机存5.689存为5.6889999999999
参考资料:自己经验
这是数据格式转换的问题。幂函数pow是用数值逼近的方法给出的,并不保证严格精确,同时执行效率也不高。(int)(99.999999999) = 99而不是100,所以得到99是有可能的。 建议你将 b=b+s[a]*pow(10,a-1); 改为 b = b * 10 + s[a]; 这样就回避了数据格式的问题。尝试一下。
关于C语言乘方运算的问题
我是是用math.h中的pow进行乘方运算的。但是在10的乘方的运算中有时会遇到一些问题。e.g. pow(10,2)得到的结果是99 请大虾们解释下原因,还有解决办法,急! 非常感谢
问题补充:
好的吧,是bcd转化成int时候用的 int bcd_decode(char *s){ int a,b,c; a=s[0]; printf("%d\n",a); b=0; for(a;a>0;a--){ b=b+s[a]*pow(10,a-1);} return b; } 还有不一定是pow(10,2)的时候有问题,总之10的乘方肯定是有错的 这个就是decode的全部内容啊,bcd是把一个数组转换成一个数字,就这样 然后直接调用这个function就行了 整个程序太长,贴不上来。那可能就是整形的问题吧,怎么改正呢?