平时在pyhon写浮点数时,直接使用浮点数用来比较或者计算可能会出现误差。因为计算机二进制的内存存储方式,十进制转换成二进制保存,读取使用的时候再由二进制转换成十进制,在这个过程就会可能出现数据精度失真。
a=1.111111111111111111111111111111111
print(a) #输出1.1111111111111112
#发现浮点数的精度有局限,超过小数点后十六位的数字,就会出现精度丢失问题
#定义两个浮点数,它们直接比较可能不相等
float_b=0.1+0.2
float_c=0.3
print(float_b==float_c) #输出False
python提供了decimal模块,用于进行高精度浮点数操作,我们通过创建decimal.Decimal对象并对其进行操作,可以确保精确的十进制计算。
#使用Decimal模块,解决浮点数精度问题
from decimal import Decimal,getcontext
#设置Decimal模块浮点数精度为100位 (如果不设置getcontext().prec= 默认会是28位小数)
getcontext().prec=100 # precision 指的是数值的有效数字位数 即精度
#具体使用方法:Decimal('') 在引号中输入要转换的浮点数
aa=Decimal('1.111111111111111111111111111111111')
print(aa) #输出1.111111111111111111111111111111111
#解决之前的比较两个浮点数,直接比较可能不相等的问题
decimal_a=Decimal('0.1')+Decimal(&#