Ketidaksempurnaan Perbandingan Titik Terapung MySQL
Semasa memperkenalkan lajur titik terapung kepada skema pangkalan data MySQL terbukti berguna, perbandingan yang melibatkan nilai titik terapung kadangkala boleh menghasilkan hasil yang tidak boleh dipercayai.
Untuk menunjukkan:
Pertimbangkan jadual dengan lajur mata yang mengandungi nilai berikut:
1 - 50.12 2 - 34.57 3 - 12.75 4 - ...(all other values are less than 12.00)
Melaksanakan pertanyaan:
SELECT COUNT(*) FROM `users` WHERE `points` > "12.75"
Sebagai contoh, mari kita pertimbangkan jadual berikut:
Menjalankan pertanyaan:
menghasilkan keputusan:CREATE TABLE a (num float); INSERT INTO a VALUES (50.12); INSERT INTO a VALUES (34.57); INSERT INTO a VALUES (12.75); INSERT INTO a VALUES (11.22); INSERT INTO a VALUES (10.46); INSERT INTO a VALUES (9.35); INSERT INTO a VALUES (8.55); INSERT INTO a VALUES (7.23); INSERT INTO a VALUES (6.53); INSERT INTO a VALUES (5.15); INSERT INTO a VALUES (4.01);
SELECT SUM(num) FROM a;
Untuk mengurangkan isu sedemikian, anda boleh menukar lajur apungan kepada jenis data PERPULUHAN dengan ketepatan dan skala yang ditentukan. Contohnya:
159.94000005722
Hasilnya kini menjadi:
Dengan menggunakan jenis data PERPULUHAN, anda boleh memastikan perbandingan yang tepat dan mengelakkan isu ketepatan yang dikaitkan dengan nilai titik terapung dalam MySQL .ALTER TABLE a MODIFY num DECIMAL(6,2); SELECT SUM(num) FROM a;
Atas ialah kandungan terperinci Mengapa Perbandingan Titik Terapung MySQL Tidak Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!