Python使用进阶之浮点数计算问题

浮点数在计算机中以二进制形式存储,导致十进制下的精确值无法完全重现,因而1.1-1的结果不是预期的1,而是0.10000000000000009。为解决精度问题,可以使用decimal库的Decimal类进行高精度计算,如示例所示,能确保浮点数相加结果为精确的6.3。
摘要由CSDN通过智能技术生成

浮点数计算问题

python 中需要大家计算1.1-1的值,大家可能的以为是 1。实则不然, python 去执行,会发现结果却为0.10000000000000009,这是为什么呢?

>>> 1.1-1
0.10000000000000009

其实,浮点数在运算过程中并没有保证完全精确。大家也许会认为这是 Python 中的 bug。但这并不是 Python 中的 bug ,它和计算机硬件中如何处理浮点数有关。

是什么原因导致了这种现象呢?浮点数在计算机硬件中以二进制的形式存在,但是我们现在看到的都是十进制,而十进制的浮点数不能都完全精确的表示为二进制小数。

如何输出正确浮点数

可借鉴以下代码,可调用 decimal 第三方库的 Decimal

>>> from decimal import Decimal
>>> a = Decimal('4.2')
>>> b = Decimal('2.1')
>>> a + b
Decimal('6.3')
>>> print(a + b)
6.3
>>> (a + b) == Decimal('6.3')
True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗者才子酒中仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值