Rumah > Artikel > pangkalan data > Mengapa Perbandingan Titik Terapung MySQL Saya Tidak Tepat?
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!