python因为是二进制存储有的小数部分会有循环所以如何比较实数

Python033

python因为是二进制存储有的小数部分会有循环所以如何比较实数,第1张

将字符串转换为float、double再进行比较。

将float、double转换为字符过程中可能存在精度损失,但是通过%.8lf可以规避,因此建议在系统开发过程中设计到字符转换建议采用double类型,精度设置为%.8lf即可。

整数的相等比较可以直接使用==来判断,但是浮点数的比较不能简单的用==来比较用"=="来比较两个double应该相等的类型,返回真值完全是不确定的计算机对浮点数的进行计算的原理是只保证必要精度内正确即可我们在判断浮点数相等时,推荐用范围来确定,若x在某一范围内,我们就认为相等,至于范围怎么定义,要看实际情况而已了,float,和double各有不同那怎么对浮点数是否相等进行判断呢。--利用差值的绝对值的精度来判断具体就是:f1和f2是两个浮点数,precision是我们自己设置的精度,比如1e-6则可以用fabs(f1-f2) 回答于 2022-04-06

原因如下:

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

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

0.00011001100110011001100110011001100110011001100110011001100

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

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

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

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

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

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

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

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

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

浮点数和整数的比较

值相等,地址不同