猿问

求解:python中float的比较方式

print float(lastpayment)-temp,'and',float(self.pyament)

if (float(lastpayment)-temp) == float(self.pyament):
print "success: "+self.pyament+" == "+tempStr
else:
print "failed: "+self.pyament+" == "+tempStr

代码如上。
结果如下:
1602.7 and 1602.7
failed: 1602.7 == 4059.5+-37.7+-1565.0
float(lastpayment)-temp和float(self.pyament)打印出来都是1602.7
为什么不是相等的?
是python对于float类型有别的比较方法吗?

倚天杖
浏览 274回答 2
2回答

偶然的你

python比较浮点数相等,由于存在精度的关系,要用math模块的isclose方法两数相差小于1e-9的话,则认为两个浮点数相等。math.isclose(a, b, rel_tol=1e-9)>>> import math>>> math.isclose(1.0, 1.0000000001)True精度可以修改:>>> math.isclose(1.0, 1.0000000001, rel_tol=1e-10)False

皈依舞

浮点数不精确,如果想要使用精确小数,请用decimal如果要比较浮点数a和b-0.00000001 < a - b < 0.00000001这样比较
随时随地看视频慕课网APP

相关分类

Python
Java
我要回答