当前位置:  开发笔记 > 编程语言 > 正文

有效地检查数字是否在第二个数字+ -10%的范围内?

如何解决《有效地检查数字是否在第二个数字+-10%的范围内?》经验,为你挑选了2个好方法。

我需要编写一个函数来检查一个数字是否在10%另一个数字的范围内.

我写了这个函数:

def IsCloseEntough(num1, num2 ):
    percent = num1/100
    if num1-percent < num2 and num2< num1+percent:
       return True;
    else:
       return False;

它返回True如果 num1-10% of num1 < num2 < num1+10%.这解决了问题,但感觉这个代码不是非常"Python Like".有没有办法让它更简单?



1> Jim Fasaraki..:

PEP 0485推出的math.isclose()功能(和它的复杂的表妹cmath.isclose()制造这些类型的检查;它还会检查特殊值,如NaN,Inf等人的明显缺点是,出现在Python 3.5从我所知道的,它仍然在它的起步阶段,因此将来可能会有一些改头换面.

基本功能:

math.isclose(1, 1.09, abs_tol=0.1)
Out[20]: True

math.isclose(1.0, 1.2, abs_tol=0.1)
Out[23]: False

math.isclose(1.0, 0.9, abs_tol=0.1)
Out[24]: True

这是一个内置的(因此你可以有效地使用它filter()),它可以检查两个数字的接近程度,并在尝试查找近似值时提供更大的灵活性.

在内部,它abs以类似的方式使用解决方案,为您自己查看C源代码,它最有可能获得它的效率.(可以找到它的python版本here)

对于旧版本的Python,您可以使用已经指出的解决方案,或者查看如何math.isclose()实现并获得灵感.


请注意,在大多数情况下rel_tol应该指定,除非处理附近的值0.另外,对于应该评估数组元素的情况,最有效的用法可能是由numpy.isclose()函数提供的.



2> MaTh..:

你可以做

def IsCloseEnough(num1, num2 ):
     return abs(float(num1 - num2) / float(num1)) < 0.1 

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有