嗨我需要比较我的项目中的浮点值我正在使用下面的代码
if style_score.style_quiz_score ==float(17.40):
但它不适用于此但当我将值从17.40更改为17时工作正常,请告诉我如何比较浮点值
答案 0 :(得分:2)
那是因为舍入错误。永远不要将浮点数与==
进行比较,请始终使用此模板:
def floats_are_the_same(a,b): return abs(a-b) < 1e-6
if floats_are_the_same(value, 17.4):
....
即。检查值 close 到某个所需的值。这是因为浮点运算几乎总是有舍入误差:
>>> 17.1 + 0.3
17.400000000000002
另请参阅:What is the best way to compare floats for almost-equality in Python?
答案 1 :(得分:2)
比较python中的浮点数(或依赖浮点数的底层硬件表示的任何语言)总是一件棘手的事情。最好的方法是定义一个公差,你可以在其中考虑两个数字相等(比如10^-6
),然后检查数字之间的绝对差是否小于你的公差。
代码:
TOLERANCE=10**-6
def are_floats_equal(a,b):
return abs(a-b) <= TOLERANCE
PS:如果您真的想要使用浮点数进行精确,任意精度的计算,请使用the decimal module。顺便提一下,该页面有一些常规浮动失败点的好例子。但是,要注意这比使用常规浮动要慢得多,所以除非你真的需要它,否则不要这样做。