在 Python 中,并没有内置的 BigDecimal 类(像 Java 或 C# 那样),但 Python 的内置 decimal 模块提供了高精度十进制浮点运算支持,其功能类似于 BigDecimal。
使用 decimal 模块(推荐)
decimal 模块提供了 Decimal 类,适用于需要精确十进制计算的场景,如金融计算、科学计算等。
基本用法:
from decimal import Decimal, getcontext
# 设置全局精度(可选)
getcontext().prec = 28 # 默认精度为28位
# 创建 Decimal 对象
a = Decimal('10.5')
b = Decimal('3.2')
# 基本运算
print(a + b) # 13.7
print(a - b) # 7.3
print(a b) # 33.60
print(a / b) # 3.28125
# 高精度计算示例
c = Decimal('1') / Decimal('3')
print(c) # 0.3333333333333333333333333333
注意事项:
-
避免使用浮点数初始化:
Decimal(0.1)会引入浮点误差,应使用字符串或整数初始化:Decimal('0.1') # 正确 Decimal(0.1) # 不推荐,可能引入误差 -
精度控制:可以通过
getcontext().prec设置全局精度,或使用quantize()方法对结果进行舍入。result = Decimal('1') / Decimal('3') rounded = result.quantize(Decimal('0.01')) # 保留两位小数 print(rounded) # 0.33
使用 fractions 模块(分数精确计算)
如果需要精确的有理数运算,可以使用 fractions.Fraction:
from fractions import Fraction a = Fraction(1, 3) b = Fraction(1, 6) print(a + b) # 1/2 print(float(a + b)) # 0.5
第三方库:mpmath(任意精度)
如果需要更高精度或支持更复杂的数学函数,可以使用 mpmath:
pip install mpmath
from mpmath import mp mp.dps = 50 # 设置50位小数精度 result = mp.mpf('1') / mp.mpf('7') print(result) # 0.14285714285714285714285714285714285714285714285714
| 场景 | 推荐方案 |
|---|---|
| 金融计算、精确十进制 | decimal.Decimal |
| 分数精确运算 | fractions.Fraction |
| 超高精度、科学计算 | mpmath |
对于大多数需要类似 BigDecimal 功能的场景,decimal 模块是最佳选择。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/477607.html



