为什么 0.1+0.2-0.3 不等于 0.0?[复制]

Why doesn't 0.1+0.2-0.3 equal 0.0? [duplicate]

提问人:Faroque Ahmed 提问时间:10/20/2022 最后编辑:matszwecjaFaroque Ahmed 更新时间:10/20/2022 访问量:582

问:

为什么 0.1+0.2-0.3 不等于 0.0 ?根据正态方程,结果应该是 0,但为什么不是呢?

有人可以解释一下原因吗?

Python 浮点 加法

评论

0赞 Guy 10/20/2022
docs.python.org/3/tutorial/floatingpoint.html
2赞 Marco Bonelli 10/20/2022
这里: 浮点数学坏了吗?

答:

-1赞 ZEE-AL-EID AHMED 10/20/2022 #1

包括 Python 在内的所有编程语言都使用 32 位浮点表示形式来表示数字。对于十进制分数,这种浮点数系统会导致一些舍入错误,从而导致 .0.1 + 0.2 == 0.3false

实际答案

例如:

1.2正好等于1.1999999999999999555910790149937383830547332763671875

溶液:

处理浮点值中这种不一致的一种解决方案是使用名为 Decimal 的本机 Python 模块


有关详细答案,请阅读以下文章:

https://gauravkk22.medium.com/why-0-1-0-2-0-3-is-false-in-js-mystery-unsolved-with-solution-4f7db2755f18

https://python.plainenglish.io/floating-point-arithmetic-precision-error-in-python-decimal-comes-for-rescue-8803d1290601https://python.plainenglish.io/floating-point-arithmetic-precision-error-in-python-decimal-comes-for-rescue-8803d1290601

评论

1赞 President James K. Polk 10/20/2022
浮点数是的,32 位......很少。几乎每个人都使用 64 位浮点数。
0赞 Andrew 11/6/2022
Python 使用 64 位浮点数;1.1999999999999999555910790149937383830547332763671875 是 64 位值
0赞 Andrew 11/6/2022
以二进制形式添加它,考虑四舍五入 - 这将解释它