如何比较Django中的浮点值

时间:2013-02-21 10:33:32

标签: python django floating-point compare

嗨我需要比较我的项目中的浮点值我正在使用下面的代码

 if style_score.style_quiz_score ==float(17.40):

但它不适用于此但当我将值从17.40更改为17时工作正常,请告诉我如何比较浮点值

2 个答案:

答案 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。顺便提一下,该页面有一些常规浮动失败点的好例子。但是,要注意这比使用常规浮动要慢得多,所以除非你真的需要它,否则不要这样做。