为什么10 // .01 = 999.0?

m9_*_*psy -2 python python-3.x

为什么不1000?结果是float,因为PEP238中的" 真正分裂语义 " ,但是.这令人困惑.我有这样的假设,实际答案就像999.9999999123564384,但如何检查呢?和BTW.math.float(999.999999999999999) = 100010 / .01 = 1000.0

Mar*_*ers 6

0.1准确的十分之一.

浮点数是二进制近似值; 正如十进制数由1 + 2 + 4 + 8 + 16等的和表示,浮点数是二进制分数的总和,1 + 2 + 1 + 4 + 1/8 + 1/16,带位打开或关闭总和中的每个分数.您只能接近十分之一,但是当您使用更多数字格式化值时,实际值会变得明显:

>>> format(0.1, '.55f')
'0.1000000000000000055511151231257827021181583404541015625'
Run Code Online (Sandbox Code Playgroud)

这使用以下分数:

>>> fractions = []
>>> sum = 0.0
>>> for i in range(1, 56):
...     fraction = 2 ** i
...     if sum + (1.0 / fraction) <= 0.1:
...         fractions.append(fraction)
...         sum += 1.0 / fraction
... 
>>> fractions
[16, 32, 256, 512, 4096, 8192, 65536, 131072, 1048576, 2097152, 16777216, 33554432, 268435456, 536870912, 4294967296, 8589934592, 68719476736, 137438953472, 1099511627776, 2199023255552, 17592186044416, 35184372088832, 281474976710656, 562949953421312, 4503599627370496, 9007199254740992, 36028797018963968]
Run Code Online (Sandbox Code Playgroud)

//为您提供了地板事业部,并乘以1000 稍微大于1/10日给你略少比100,使得地板999.