2016-11-14 76 views
0

我想比較兩個浮點數。 我已經在這裏看到了很多關於stackoverflow的問題,但是我還沒有找到解決方案。mysql比較浮點數被忽略

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

價格是「6.30」 在DB我想,除了一個有價6.30所有結果。但它完全忽略它。

我知道它與浮游物有關。我不能編輯數據庫表,這不是一個不幸的選擇。

是否有任何其他方式通過只使用mysql來做到這一點?

+0

你不能比較像這樣的花車。你需要一個固定的表示,就像'sprintf'和可預測的四捨五入一樣。這可能是'6.29999999381238'。 – tadman

+1

花車並不精確。如果支持,您應該使用數字(X,2),小數或其他貨幣。雙打和浮動是非常大或非常小的數字,不需要精度。如果在表格列表中,您將價格存儲爲浮點數或雙倍數,那麼您做錯了。價格應該是貨幣,或具有特定小數位數的數字。爲更詳細的答案http://stackoverflow.com/questions/13030368/best-data-type-to-store-money-values-in-mysql – xQbert

+0

非常感謝您的答案 – giancy9

回答

0

比較浮點數是非常危險的,因爲看起來相同的值可能會略有不同。一種方法是:

WHERE ABS(price - $price) < 0.001 

問題在於它無法使用索引。你可以使用:

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

當然,0.001是一個任意的公差測量。您可能需要更小或更大的值。

而且,我應該提一下decimal/numeric值是比較安全的。