这是数据格式转换的问题。幂函数pow是用数值逼近的方法给出的,并不保证严格精确,同时执行效率也不高。(int)(99.999999999) = 99而不是100,所以得到99是有可能的。
建议你将 b=b+s[a]*pow(10,a-1);
改为 b = b * 10 + s[a];
这样就回避了数据格式的问题。尝试一下。
//我在VS2005下测试,下面这个程序的结果是100.000000,没有发生你说的情况。
#include
#include
void main()
{
printf("%f\n",pow(10.0,2));
}
补充:
bcd_decode可能有问题,把全部程序贴出来!
是吗?把你的程序贴上开看看
没看明白你到底要做什么 举了例子 或者贴全了看看
pow运算的都是实型
你肯定是字符转整形在转实型运算是计算机存储上发生了变化
例如5.689×1000输出整形为5688
因为计算机存5.689存为5.6889999999999
你猜呢!