python浮点数float的精度问题

文章讲述了在Python中,由于浮点数的内存存储方式导致精度问题,当浮点数超过小数点后16位会出现精度丢失。通过介绍decimal模块,提供了一种高精度浮点数操作的方法,确保了计算的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平时在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(&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值