我想比较两个浮点数。 我已经在stackoverflow上看到了一些问题,但我还没有找到解决方案。
$sql = "SELECT price FROM list
WHERE price != '".(float)$price."'";
价格是“6.30” 在DB我想得到除价格6.30之外的所有结果。但它完全忽略了它。
我知道它与浮动有关。我不能编辑DB表,遗憾的是这不是一个选项。
有没有其他方法可以通过使用mysql来实现?
答案 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。