MySQL 浮點比較異常
浮點數通常因其不精確的性質而在比較中導致意外結果而臭名昭著。 MySQL 也不例外。
想像一下這個場景:MySQL 表中有一個名為「points」的列,用來儲存浮點數值。當執行諸如:
之類的查詢時,您可能會期望它會傳回 3,因為有四個值大於 12.75。然而,MySQL 可能只會回傳 2。
此行為是計算機中實現浮點運算方式的結果。儘管在我們的程式碼中將值儲存為“12.75”或“50.12”,但這些值通常在內部儲存為近似值。
浮點算術錯誤的內部
到為了說明這一點,讓我們對一些浮點數進行簡單求和:
此查詢可能會傳回類似「159.94000005722」而不是「159.94」的結果。額外的「0.00000005722」是浮點算術內捨入錯誤的結果。
修正 DECIMAL 類型的問題
為了避免此類不準確,建議使用 DECIMAL 資料類型。 DECIMAL 將值表示為具有固定位數的字串,而不是依賴浮點近似值。
透過此更改,SUM 查詢將傳回預期結果「159.94」。
結論
雖然浮點類型對於某些應用程式來說很方便,但它們的比較行為在 MySQL 中可能不可靠。為了進行精確的比較和計算,強烈建議使用 DECIMAL 資料類型。
以上是為什麼 MySQL 在比較浮點數時回傳意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!