2016-09-22 113 views
-1

我在Python 3中有两个float值(“a”和“b”),每个float值可以有5到15个小数点。问题是,当两个值对我来说相等时,python会给我一个False。哪个是比较python中两个float值最快的方法?

Examples: 
a=12.091824733909107, b=12.091824733909117 
or also 
a=12.54678, b=12.546780000

对于我在上面的例子中,“a”和“b”是相等的。一种解决方法是使用round(a,5)和round(b,5)来削减小数点,但是使用round()数百万次增加时间过程。是否有另一种解决方案不需要使用round()?

+0

这是因为两个值不是**相等。 – Dawny33

+0

当你使用时会发生什么;如果a-b = 0:返回true; elif a-b!= 0:返回false; – Roy123

+0

@Roy_Dorsthorst使a-b不能解决问题,因为例如python会从差异0.000000001中识别出来。此外,我认为比两个值更快,比作出差异和比较结果0 – lausent

回答

0

您需要设置一个公差范围,例如,如果A和B之间的区别是波纹管他们被认为等于

>>> def is_close(a, b, tol=1e-9): 
     return abs(a-b) <= tol 

>>> is_close(12.091824733909107, 12.091824733909117) 
True 
>>> is_close(12.54678, 12.5467800000123) 
True 
>>> 

或在Python 3.5+

>>> import math 
>>> math.isclose(12.091824733909107, 12.091824733909117) 
True 
>>> math.isclose(12.54678, 12.5467800000123) 
True 
>>> 
+0

我在python 3.4和3.5中做了一些测试,似乎使用“%.xf”%a和“%.xf”%b是最快的解决方案(x等于7)。它也比math.isclose更快(少了几秒)。 – lausent

相关问题