python浮点数精度问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python浮点数精度问题相关的知识,希望对你有一定的参考价值。

参考技术A 原因如下:

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

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

0.00011001100110011001100110011001100110011001100110011001100

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

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

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

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

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

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

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

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

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

浮点数和整数的比较

值相等,地址不同

以上是关于python浮点数精度问题的主要内容,如果未能解决你的问题,请参考以下文章

用decimal模块增加python的浮点数精度

Python 模拟32bit 浮点数运算

js 双精度浮点数

为啥 Python 3 字符串函数似乎会降低浮点数的精度?

在 Python 中定义浮点数的精度

取一个双精度浮点数,并输出它(保留小数点后8位),