C++ 浮点数舍入(错误?[复制]

C++ float rounding (error?) [duplicate]

提问人:mrgloom 提问时间:4/10/2014 更新时间:4/10/2014 访问量:1686

问:

为什么当我使用乘法时

float a= 1.0500000f;
float b= a*100.0f;

为什么 B 是 104.99999 而不是 105.0 ?

当我

int f= (int)b;

f 为 104

C++ 精度 浮点精度 浮 点转换

评论

3赞 001 4/10/2014
浮点数学坏了吗?
4赞 Phylogenesis 4/10/2014
请参阅此处,了解您需要了解的所有信息。至于音调部分,那是由于截断。
0赞 phuclv 4/10/2014
这个网站上有很多关于这个“问题”的问题。阅读更多 docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

答:

1赞 Lee White 4/10/2014 #1

浮点数不是无限精确的——关于浮点数的维基百科页面读起来非常有趣。

关于第二个问题:截断逗号后面发生的任何内容。这意味着,在您的情况下,变为 .因此,当您创建一个舍入错误,然后将其转换为整数时,您确实冒着获得较小数字的风险。(int)b104.99999104

评论

2赞 Some programmer dude 4/10/2014
第二部分有点错误,强制转换为不会向下舍入,它只是截断了值。int
0赞 Lee White 4/10/2014
...其结果是数字向下舍入。但是,是的,我已经更新了我的帖子。
0赞 rici 4/10/2014
如果为负数,则不会向下舍入。