在c中将小数位右移

罗伯特

我是C语言的新手,当我运行下面的代码时,输​​出的值是12098,而不是12099。

我知道使用小数总是会产生一定程度的误差,但是有没有办法每次都将小数点准确地移到正确的两个位置?

#include <stdio.h>

int main(void)
{
    int i;
    float f = 120.99;

    i = f * 100;
    printf("%d", i);
}
Serge Ballesta

您的问题是使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章