You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中/与//运算符在整除场景下为何结果不同?

Python 大整数除法:/ 与 // 结果不一致的原因及解决方法

问题根源:浮点数的精度限制

Python 里的 / 是浮点数除法,返回结果为 float 类型(双精度64位)。而双精度浮点数的尾数仅能容纳53位有效二进制位,对应大约16-17位十进制有效数字——超过这个范围的整数,无法被浮点数精确存储。

你给出的 a = 123456789012345678 是18位十进制数,已经超出了双精度浮点数的精确表示范围。执行 a/2 时,Python 会先把 a 转换为浮点数,这个转换过程就已经丢失了精度(浮点数只能近似存储这个大整数),再除以2后转成 int,结果自然和真实值有偏差。

而 // 是整数地板除法,全程对整数进行运算,不会涉及浮点数转换,所以能得到精确的整数商。

让 / 得到正确结果的方案

如果想要通过除法得到精确结果,避开浮点数的精度坑,可以用这些方法:

  • 优先使用 //:对于能整除的场景,a//2 本身就是精确结果,这是最直接高效的方式。
  • 用 decimal 模块做高精度运算:通过设置足够的精度,确保数字能被精确存储和计算:
    from decimal import Decimal, getcontext
    
    # 设置精度为20位,覆盖示例中的18位数字
    getcontext().prec = 20
    a = 123456789012345678
    precise_result = Decimal(a) / 2
    print(int(precise_result))  # 输出 61728394506172839
    
  • 用 fractions 模块处理精确分数:以分数形式存储运算过程,避免精度损失,之后可转成整数:
    from fractions import Fraction
    
    a = 123456789012345678
    fraction_result = Fraction(a, 2)
    print(int(fraction_result))  # 输出 61728394506172839
    

内容的提问来源于stack exchange,提问作者topcat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:22:57