Python3奇怪的浮动舍入

时间:2016-08-03 23:28:12

标签: python-3.x math

有人可以解释我为什么我没有得到166.9(我知道有一个round()函数)我只是想了解。 :)

>>> 165.0 + 1.45 + 0.45
166.89999999999998

2 个答案:

答案 0 :(得分:0)

这是因为在计算机中是以二进制形式表示的数字。这不仅仅是Python中的问题,而是一般的计算机。

答案 1 :(得分:0)

浮点数在python中以64位存储。 1位是符号,尾数是52位,指数是11位。要从这3个组件中获取十进制值,计算机将执行* mantissa * 2 ^ exponent。

并非所有数字都可以完美地存储在此表单中。只有52位来存储数字。例如,11.3无法以这种形式完美存储,您可以看到数字的确切值。

from decimal import Decimal
print(Decimal(11.3))

当您添加165.0 + 1.45 + 0.45时。

>>> print(Decimal(165))
165
>>> print(Decimal(1.45))
1.4499999999999999555910790149937383830547332763671875
>>> print(Decimal(0.45))
0.450000000000000011102230246251565404236316680908203125

您实际上并未添加这些确切的值。

有关浮点数系统的更多信息,请访问Wikipedia