mysql比较浮点数被忽略了

时间:2016-11-14 17:18:31

标签: mysql sql select floating-point

我想比较两个浮点数。 我已经在stackoverflow上看到了一些问题,但我还没有找到解决方案。

$sql = "SELECT price FROM list
        WHERE price != '".(float)$price."'";

价格是“6.30” 在DB我想得到除价格6.30之外的所有结果。但它完全忽略了它。

我知道它与浮动有关。我不能编辑DB表,遗憾的是这不是一个选项。

有没有其他方法可以通过使用mysql来实现?

2 个答案:

答案 0 :(得分:0)

比较浮点数是非常危险的,因为看起来相同的值可能会略有不同。一种方法是:

WHERE ABS(price - $price) < 0.001

这个问题是它无法使用索引。您可以改为使用:

WHERE price >= $price - 0.001 and price > $price + 0.001

当然,0.001是容差的任意度量。您可能需要更小或更大的值。

而且,我应该提及decimal / numeric值可以安全比较。

答案 1 :(得分:0)

这将起作用:

$sql = "SELECT price FROM list WHERE price NOT LIKE '".(float)$price."'";

因为我的SQL对FLOAT的对待是INT还是CHAR。