use*_*581 8 python floating-point
如何检查浮点值是否在一个范围内(0.50,150.00)并且有2位小数?
例如,15.22366应为false(十进制数字太多).但是15.22应该是真的.
我尝试过类似的东西:
data= input()
if data in range(0.50,150.00):
return True
Run Code Online (Sandbox Code Playgroud)
Syl*_*oux 17
那是你在找?
def check(value):
if 0.50 <= value <= 150 and round(value,2)==value:
return True
return False
Run Code Online (Sandbox Code Playgroud)
鉴于你的评论:
我输入15.22366它将返回true; 这就是我指定范围的原因; 它应该接受15.22
简单地说,浮点值是不精确的.许多值没有精确的表示.比如说1.40.它可能会显示为"as it":
>>> f = 1.40
>>> print f
1.4
Run Code Online (Sandbox Code Playgroud)
但这是一种幻觉.Python已经舍入该值以便很好地显示它.变量引用的实际值f非常不同:
>>> from decimal import Decimal
>>> Decimal(f)
Decimal('1.399999999999999911182158029987476766109466552734375')
Run Code Online (Sandbox Code Playgroud)
根据你的规则只有2位小数,是否应该f引用有效值?
修复该问题的最简单方法可能是round(...,2)按照我在上面的代码中的建议使用.但这仅仅是一种启发式 - 只能拒绝"很大程度上错误"的价值观.请看我的观点:
>>> for v in [ 1.40,
... 1.405,
... 1.399999999999999911182158029987476766109466552734375,
... 1.39999999999999991118,
... 1.3999999999999991118]:
... print check(v), v
...
True 1.4
False 1.405
True 1.4
True 1.4
False 1.4
Run Code Online (Sandbox Code Playgroud)
注意最初的几个结果最初可能会令人惊讶.我希望我的上述解释对此有所启发.
作为最后的建议,根据你的问题,我猜测你的需求,你应该明确地考虑使用"十进制算术".Python 为此提供了十进制模块.