python浮点数精度问题

python浮点数精度问题_第1张图片

原因如下:

出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确。

比如说: 0.1是十进制,转化为二进制后它是个无限循环的数:

0.00011001100110011001100110011001100110011001100110011001100

而python是以双精度(64)位来保存浮点数,多余的位会被截掉,所以看到的是0.1,但在电脑上实际保存的已不是精确的0.1,参与运算后,也就有可能点误差。

------------------------------------------------------------------------------------------------------------------------------------

[Python3]计算高精确度的浮点数方法

decimal 模块的"getcontext"和"Decimal"方法

getcontext().prec = 2 #设置精度

python浮点数精度问题_第2张图片

------------------------------------------------------------------------------------------------------------------------------------

Update

decimal模块中,可以通过整数,字符串或原则构建decimal.Decimal对象。如果是浮点数,特别注意因为浮点数本身存在误差,需要先将浮点数转化为字符串。

python浮点数精度问题_第3张图片

当然精度提升的同时,肯定带来的是性能的损失。在对数据要求特别精确的场合(例如财务结算),这些性能的损失是值得的。但是如果是大规模的科学计算,就需要考虑运行效率了。毕竟原生的float比Decimal对象肯定是要快很多的。

-------------------------------------------------------------------------------------------------------------------------------

Other


python浮点数精度问题_第4张图片

浮点数和整数的比较

值相等,地址不同

python浮点数精度问题_第5张图片

你可能感兴趣的:(python浮点数精度问题)