【发布时间】:2011-06-29 03:48:20
【问题描述】:
可能的重复:
Precision of Floating Point
Floating point arithmetic is too reliable.
大家好,
我遇到了一个看起来很奇怪的问题,我正在以 0.01 的步长运行从 82.01 到 169.06 的循环,但是当我达到 128.01 并执行 (128.01+0.01) 时,它会给出 128.019999999998 而不是 128.02。 我对所有这些计算都使用双精度。如果我使用小数来进行这些计算,效果很好,我是否在这里缺少一个非常基本的基础,我在网上找到了一些文章和讨论,解释说小数是执行这些操作的正确数据类型计算,但仍然像 (128.01+0.01) 这样的基本计算应该给出正确的结果。
【问题讨论】:
-
那你期望太高了。
-
几分钟前刚刚被问及回答的完全相同的问题:stackoverflow.com/questions/5029955/…下次请先使用搜索。
-
这是意料之中的(给定一个有效的表达式)。并非所有浮点数都可以用二进制精确表示,因此计算中会出现舍入误差。
decimal和double将得到不同的舍入误差,因为它们的位表示不同。这也是一个重复的问题。 -
请参阅floating-point-gui.de 以获得很好的解释。
标签: c# .net math double decimal