我是C语言的新手,当我运行下面的代码时,输出的值是12098,而不是12099。
我知道使用小数总是会产生一定程度的误差,但是有没有办法每次都将小数点准确地移到正确的两个位置?
#include <stdio.h>
int main(void)
{
int i;
float f = 120.99;
i = f * 100;
printf("%d", i);
}
您的问题是使用IEEE-754在内部表示浮点数。也就是说,以2为底,而不是以10为底,0.25
将具有精确的表示形式,但0.1
没有,也没有120.99
。
实际发生的情况是,由于浮点数不精确,最接近十进制值120.99
乘以的ieee-754浮点数100
略低于12099
,因此将其截断为12098
。您的编译器应该警告您,您已从float到in截断了(我确实这么做了)。
获得期望的唯一简单方法是0.5
在截断int之前添加到float中:
i = (f * 100) + 0.5
但是请注意,在处理十进制值时,浮点本来就不准确。
编辑 :
当然对于负数,应该是i = (f * 100) - 0.5
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句