因为类型不一样,Python 3 中 / 的结果是 float 类型,而 // 的结果是 int 类型,在计算机中的意义、内部表示、计算方法是截然不同的。
计算机浮点数不是数学中的实数,是有限范围和有限精度的。
1000000000000000000000000 这么长的数,就超出了双精度浮点数的精度。
你可能会惊奇地发现:
float(1000000000000000000000001)==float(1000000000000000000000000)
结果是 True
进一步的现象是
>>> '{:.0f}'.format(float(1000000000000000000000000))
'999999999999999983222784'
>>> '{:.0f}'.format(float(1000000000000000000000001))
'999999999999999983222784'
原因可以查资料去理解 IEEE 754 标准中双精度浮点数的计算机内部表示。比如可以读《深入理解计算机系统》的开头章节。
Python 的变量没有类型,这可能会造成初学者忽略值的类型是有差别的。
【 在 jackylx2008 (梅特涅) 的大作中提到: 】
: 用 //确实解决了问题,不过还是没明白是什么原因造成的