MySQL 浮點比較挑戰
MySQL 使用者在比較浮點數值時常遇到不準確的情況。考慮以下範例:
CREATE TABLE users (points float);
INSERT INTO users VALUES (50.12); INSERT INTO users VALUES (34.57); INSERT INTO users VALUES (12.75);
查詢 SELECT COUNT(*) FROM users WHERE 點 > “12.75”返回 3,儘管預期計數為 2。
浮點算術問題
MySQL 使用浮點算術來儲存和操作 float 類型價值。該系統使用尾數(實際數字)和指數的組合來表示數字,從而導致潛在的精確度問題。例如,由於浮點數的二進位表示形式,值 12.75 在輸入 MySQL 時可能會儲存為 12.75000005722。
精確的十進位表示
為了避免這種情況不準確,建議使用 MySQL 中的 DECIMAL 資料類型來精確表示十進位。與浮點不同,DECIMAL 將值儲存為定點數,確保精確精度。
轉換為DECIMAL
要將現有浮點列轉換為DECIMAL,請使用ALTER TABLE語句:
ALTER TABLE users MODIFY points DECIMAL(6,2);
這會將點轉換為總共6 位數字的小數列,並且2 位小數。您可以根據需要調整精度和小數位數。
結論
雖然 float 看起來很方便,但浮點運算固有的不準確性可能會導致在比較時出現意外結果價值觀。為了精確的十進位表示和準確的比較,強烈建議在 MySQL 中使用 DECIMAL 資料類型。透過使用 DECIMAL,您可以避免浮點比較的潛在陷阱並確保資料的可靠性。
以上是為什麼 MySQL 中的浮點比較不準確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!