有人可以解释我为什么我没有得到166.9(我知道有一个round()函数)我只是想了解。 :)
>>> 165.0 + 1.45 + 0.45
166.89999999999998
答案 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。