这个问题在这里已经有了答案:
Is floating point math broken?
(31 个回答)
8年前关闭。
当我在 ghci 中执行 5.2 - 2.3 时,我将得到 2.9000000000000004 而不是 2.9。
当使用 Double 或 Float 时,这种丑陋的(并且对于人类来说是错误的)结果也会出现在其他地方。
为什么会这样? (这只是出于好奇,不是我真正的问题)
我真正的问题:
我如何告诉 ghci 不要那样做,并像任何其他编程语言(和计算器)一样显示 double 运算的结果,就像每个 15 岁的 child 都会写它们一样?
当我使用 ghci 作为一个不错的计算器并处理我执行此类操作的列表时,这真是太烦人了。
map ((-)2.3) [4.0, 3.8, 5.2, 6.4, 1.3, 8.3, 13.7, 9.0, 7.5, 2.4]
[-1.7000000000000002,-1.5,-2.9000000000000004,-4.1000000000000005,0.9999999999999998,-6.000000000000001,-11.399999999999999,-6.7,-5.2,-0.10000000000000009]
之后在一张纸上使用数字时,这无济于事
提前致谢 :)
最佳答案
Why does this happen?
因为某些浮点数不能在不四舍五入的情况下用有限的位数表示。 Floating-point numbers位数有限,它们不能代表所有 real numbers准确:当数字多于格式允许的数字时,将省略剩余的数字 - 数字被四舍五入。
您可能应该阅读 What Every Computer Scientist Should Know About Floating-Point Arithmetic和 this answer .
关于haskell - 丑陋的 double - 为什么是 2.9000000000000004 而不是 2.9?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17770110/