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

Python Decimal模块精度设置疑问:为何精度设5却得到6位结果?

Decimal模块prec参数的误区与保留指定小数位数的方法

你混淆了getcontext().prec的作用——它控制的是有效数字的总位数,不是小数部分的位数。

你设置的prec=5,意味着计算结果会保留5个有效数字。来看你的计算结果:准确值是0.0120079335,有效数字是从第一个非零数字"1"开始数:1、2、0、0、7,第5位有效数字是7,后面跟着9,所以四舍五入后变成8,最终得到0.012008——这正好是5个有效数字(1、2、0、0、8),完全符合prec的设置逻辑。你之前误以为是保留5位小数,所以才会有预期偏差。


如果要始终保留5位小数,不要依赖prec,而是用Decimal的quantize()方法,明确指定小数位数的格式:

修改后的代码如下:

from decimal import Decimal, getcontext

a = Decimal("80.05289")
b = Decimal("0.00015")

c = a * b
# 指定保留5位小数,用Decimal('0.00001')作为格式模板
c_rounded = c.quantize(Decimal('0.00001'))
print(c_rounded)

运行这段代码会输出0.01201,和你最初的预期一致。

如果需要全局统一设置小数的 rounding 规则,可以调整getcontext().rounding(比如设置为ROUND_HALF_UP),但quantize()是针对单个数值控制小数位数最直接的方式。

内容的提问来源于stack exchange,提问作者Vladislav Korecký

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:52:06