為什麼 MySQL 在比較浮點數時回傳意外結果?

Linda Hamilton
發布: 2024-11-10 16:34:02
原創
791 人瀏覽過

Why does MySQL return unexpected results when comparing floating-point numbers?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板