为何Python中6.3//2.1整数除法结果为2.0而非3.0?
浮点数整数除法结果异常的原因
这是二进制浮点数的精度误差导致的,核心问题在于:十进制里的2.1、6.3这类小数,无法用二进制浮点数精确存储,Python实际存储的是它们的近似值。
- 你可以用
repr()函数查看这些浮点数的真实存储值:print(repr(6.3)) # 输出 6.299999999999999 print(repr(2.1)) # 输出 2.0999999999999996 - 当执行
6.3//2.1时,实际是用这两个近似值做除法:6.299999999999999 / 2.0999999999999996的结果是2.9999999999999996,而整数除法//的规则是向下取整,所以最终得到2.0。 - 拆分成分数形式
(63/10)//(21/10)也一样,因为63/10和21/10同样会被转换为不精确的二进制浮点数,运算过程还是存在精度误差,结果自然也是2.0。
至于你觉得2.1 * 3.0 == 6.3成立,是因为Python在显示浮点数时做了四舍五入,实际存储的2.0999999999999996 * 3结果就是6.299999999999999,和6.3的存储值一致,所以等式返回True,但这只是近似相等,不是精确相等。
如果需要精确的十进制运算,可以用Python标准库的decimal模块:
from decimal import Decimal print(Decimal('6.3') // Decimal('2.1')) # 输出 Decimal('3')
内容的提问来源于stack exchange,提问作者Talha Tayyab
相关产品推荐
相关产品推荐

