python如何实现小数部分的高精度计算

对于精度要求不高的计算,你可以使用float类型,但你需要明白,float并不能够实现高精度计算,比如0.10 + 0.20

print(0.10 + 0.20)   # 0.30000000000000004

之所以出现这种情况是因为浮点数在计算机中实际是以二进制保存的,有些数并不精确,因此在金融等需要高精度计算领域里,高精度计算时就不能使用float类型,而是用decimal模块

import decimal

a = decimal.Decimal('0.10')
b = decimal.Decimal('0.20')

c = a + b
print(c)        # 0.30

这里切记不要传入flaot类型,因为float本身就不准确,你可以传入字符串或者int类型数据。

通过设置有效数字可以决定小数点后有效位数

import decimal

decimal.getcontext().prec = 6
print(decimal.Decimal(1)/decimal.Decimal(7))        # 0.142857
print(1/7)      # 0.14285714285714285

在截取有效位数时,遵守四舍五入机制,你也可以使用quantize方法来决定保留几位小数

import decimal

res = decimal.Decimal(1)/decimal.Decimal(7)
print(res)      # 0.1428571428571428571428571429
res = res.quantize(decimal.Decimal('0.000'))        # 四舍五入,保留3位有效数字
print(res)      # 0.143

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案