在Python中使用`decimal`模块时,**初始化方式**是关键问题!你的代码用浮点数初始化`Decimal`对象,但浮点数本身就有精度误差。正确做法是用**字符串**初始化,避免浮点误差传递:
- import decimal
- a = decimal.Decimal('0.1') # 用字符串初始化!
- b = decimal.Decimal('0.3') # 用字符串初始化!
- c = a + a + a - b
- print(c) # 输出 0.0
复制代码
错误原因分析:
1.
decimal.Decimal(0.1) 中的
0.1 是浮点数,实际内存值为近似值
0.100000000000000005551115...
2. 这个近似值被直接传递给`Decimal`,导致后续计算继承误差
正确做法总结:
- 永远用字符串初始化小数:Decimal('0.1')
- 需要整数时可直接传数字:Decimal(10)
- 涉及金钱等精确计算时,建议全局设置精度:
- decimal.getcontext().prec = 6 # 设置6位有效数字
-
复制代码
试试修改后的代码,结果将是精确的 0.0!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。