Rumah  >  Artikel  >  pangkalan data  >  Mengapa Perbandingan Titik Terapung MySQL Saya Tidak Tepat?

Mengapa Perbandingan Titik Terapung MySQL Saya Tidak Tepat?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-08 13:45:02983semak imbas

Why are My MySQL Floating-Point Comparisons Inaccurate?

Isu Perbandingan Titik Terapung MySQL

Anda menghadapi masalah dengan perbandingan titik terapung dalam MySQL kerana nombor titik terapung sememangnya tidak tepat kerana kepada cara mereka diwakili dalam binari. Ini boleh membawa kepada hasil yang tidak dijangka apabila membandingkan nilai yang sepatutnya sama.

Pertimbangkan contoh berikut:

SELECT COUNT(*) FROM `users` WHERE `points` > "12.75"

Anda menjangkakan pertanyaan ini akan mengembalikan 2, kerana terdapat dua baris dengan titik lebih daripada 12.75. Walau bagaimanapun, ia mengembalikan 3 kerana nombor titik terapung diwakili dengan bilangan bit yang terhad, yang membawa kepada ralat pembundaran.

Pakar mengesyorkan menggunakan jenis data PERPULUHAN dan bukannya FLOAT atau DOUBLE untuk pengiraan kewangan dan aplikasi lain di mana ketepatan adalah penting. DECIMAL menyimpan nilai sebagai nombor titik tetap, menghapuskan ralat pembundaran yang boleh berlaku dengan nombor titik terapung.

Untuk menggambarkan, mari tukar lajur mata daripada FLOAT kepada PERPULUHAN:

ALTER TABLE `users` MODIFY COLUMN `points` DECIMAL(6,2)

Kini, apabila anda menjalankan pertanyaan sekali lagi, anda akan mendapat hasil yang dijangkakan sebanyak 2.

Atas ialah kandungan terperinci Mengapa Perbandingan Titik Terapung MySQL Saya Tidak Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn