python内置高精度计算 #
- 高精度计算的内置函数
- 高精度计算的内置函数参数
- 内置函数的四则运算
收获 #
学完本节内容,可以掌握如何使用python内置函数进行高精度计算的加减乘除运算。
高精度计算的内置函数 #
对于精度要求不高的计算,可以使用float类型,但float并不能够实现高精度计算,比如0.10 + 0.20,
print(0.10+0.20) #0.30000000000000004
print(0.10+0.20) #0.30000000000000004
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
import decimal
a = decimal.Decimal('0.10')
b = decimal.Decimal('0.20')
c = a + b
print(c) # 0.30
import decimal a = decimal.Decimal('0.10') b = decimal.Decimal('0.20') c = a + b print(c) # 0.30
需要注意的是,一定不要传入flaot类型的数据,因为float本身就不准确,可以传入字符串或者int类型数据。
高精度计算的内置函数参数 #
decimal函数通过设置有效数字可以决定小数点后有效位数,示例如下:
import decimal
decimal.getcontext().prec = 3 #四舍五入,保留3位有效数字
print(decimal.Decimal(1)/decimal.Decimal(7)) # 0.143
print(1/7) # 0.14285714285714285
import decimal
decimal.getcontext().prec = 3 #四舍五入,保留3位有效数字
print(decimal.Decimal(1)/decimal.Decimal(7)) # 0.143
print(1/7) # 0.14285714285714285
import decimal decimal.getcontext().prec = 3 #四舍五入,保留3位有效数字 print(decimal.Decimal(1)/decimal.Decimal(7)) # 0.143 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
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
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
内置函数的四则运算 #
当引入decimal函数时,高精度计算的四则运算方法跟普通的四则运算方法相同,具体示例如下:
from decimal import *
a=Decimal('0.15')
b=Decimal('1.73')
c1=a+b
c1=c1.quantize(Decimal('0.000')) #1.880
c2=a-b
c2=c2.quantize(Decimal('0.000')) #-1.580
c3=a*b
c3=c3.quantize(Decimal('0.000')) #0.260
c4=a/b
c4=c4.quantize(Decimal('0.000')) #0.087
print(c1,c2,c3,c4)
from decimal import *
a=Decimal('0.15')
b=Decimal('1.73')
c1=a+b
c1=c1.quantize(Decimal('0.000')) #1.880
c2=a-b
c2=c2.quantize(Decimal('0.000')) #-1.580
c3=a*b
c3=c3.quantize(Decimal('0.000')) #0.260
c4=a/b
c4=c4.quantize(Decimal('0.000')) #0.087
print(c1,c2,c3,c4)
from decimal import * a=Decimal('0.15') b=Decimal('1.73') c1=a+b c1=c1.quantize(Decimal('0.000')) #1.880 c2=a-b c2=c2.quantize(Decimal('0.000')) #-1.580 c3=a*b c3=c3.quantize(Decimal('0.000')) #0.260 c4=a/b c4=c4.quantize(Decimal('0.000')) #0.087 print(c1,c2,c3,c4)
小结 #
理解并掌握python内置高精度计算函数decimal的用法
掌握使用decimal进行高精度计算的四则运算方法,并可以保存计算结果为固定精度的小数
习题 #
- 习题1:简述使用内置函数decimal进行高精度计算的一些重要参数及意义
- 习题2:使用decimal进行下面两个数据的高精度计算的四则运算,并保留结果为6位小数。num1=5.782,num2=2.34