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

Python使用//与%拆分浮点数时0.30计算结果不符合预期求助

问题成因

这个问题的核心是二进制浮点数精度丢失:十进制的0.1、0.2、0.3这类小数无法被二进制浮点数精确表示,实际存储的是接近真实值的近似值。
你可以手动测试0.3 - 0.2的输出,结果并非预期的0.1,而是近似值0.09999999999999998,该数值小于0.1,因此0.09999999999999998 // 0.1的计算结果为0.0,和你遇到的现象完全吻合。

解决方法

有两种常用的无精度问题实现方案:

方案1:转整数运算(最高效稳妥)

把所有金额统一放大100倍转为整数,用整数的整除、取模运算计算,完全规避浮点数精度问题,代码示例:

# 放大100倍转整数,覆盖到0.01级别的精度需求
x = int(round(float(input('Type a number ')) * 100))
print(x // 100, "1")
x = x % 100
print(x // 50, "0.50")
x = x % 50
print(x // 20, "0.20")
x = x % 20
print(x // 10, "0.10")

方案2:使用decimal模块做精确十进制运算

如果需要保留小数运算的形式,可以用Python标准库的decimal模块指定精度做精确计算,代码示例:

from decimal import Decimal, getcontext
# 设置计算精度覆盖需求
getcontext().prec = 2
x = Decimal(input('Type a number '))
print(int(x // Decimal('1')), "1")
x = x % Decimal('1')
print(int(x // Decimal('0.50')), "0.50")
x = x % Decimal('0.50')
print(int(x // Decimal('0.20')), "0.20")
x = x % Decimal('0.20')
print(int(x // Decimal('0.10')), "0.10")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:03