Python按dx增量遍历x1至x2时循环输出浮点数精度异常如何解决
问题原因
核心是二进制浮点数精度误差导致的:
- 十进制的
0.1无法被二进制浮点数精确表示,Python 中 float 类型存储的本身就是接近 0.1 的近似值 - 每次累加
0.1的操作都会将微小的误差累积,多次运算后误差就会显性化,出现你看到的多位小数的异常结果
修复方案
方案1:输出时格式化处理(最简单,适合仅对输出格式有要求的场景)
修改打印语句,强制保留1位小数同时自动去除多余的尾缀.0即可:
a = 1 while a < 2: # 格式化后去掉末尾多余的0和小数点 print(f"{a:.1f}".rstrip('0').rstrip('.')) a += 0.1
方案2:整数累加规避浮点误差(最稳妥,无精度损失)
将所有数值放大10倍转换为整数运算,输出时再缩小10倍,完全避免浮点运算的精度问题:
a = 10 while a < 20: res = a / 10 # 整数结果输出整型,否则保留一位小数 print(int(res) if res.is_integer() else res) a += 1
方案3:使用decimal模块做精确十进制运算(适合高精度运算场景)
如果业务本身对数值精度要求极高,可以用Python标准库的decimal模块处理十进制精确运算:
from decimal import Decimal a = Decimal("1") dx = Decimal("0.1") while a < Decimal("2"): res = float(a) print(int(res) if res.is_integer() else res) a += dx
内容的提问来源于stack exchange,提问作者Nikolay G
相关产品推荐
相关产品推荐

