Rumah > Artikel > pangkalan data > Mengapa Perbandingan Titik Terapung dalam MySQL Tidak Tepat?
Cabaran Perbandingan Titik Terapung MySQL
Pengguna MySQL sering menghadapi ketidaktepatan apabila membandingkan nilai titik terapung. Pertimbangkan contoh berikut:
CREATE TABLE users (points float);
INSERT INTO users VALUES (50.12); INSERT INTO users VALUES (34.57); INSERT INTO users VALUES (12.75);
Pertanyaan SELECT COUNT(*) FROM users WHERE point > "12.75" mengembalikan 3, walaupun menjangkakan kiraan 2.
Isu dengan Aritmetik Titik Terapung
MySQL menggunakan aritmetik titik terapung untuk menyimpan dan memanipulasi jenis apungan nilai. Sistem ini mewakili nombor menggunakan gabungan significand (nombor sebenar) dan eksponen, mengakibatkan isu ketepatan yang berpotensi. Sebagai contoh, nilai 12.75 boleh disimpan sebagai 12.75000005722 apabila dimasukkan ke dalam MySQL disebabkan oleh perwakilan binari nombor titik terapung.
Perwakilan Perpuluhan Tepat
Untuk mengelakkan sedemikian ketidaktepatan, adalah disyorkan untuk menggunakan jenis data PERPULUHAN dalam MySQL untuk perwakilan perpuluhan yang tepat. Tidak seperti apungan, DECIMAL menyimpan nilai sebagai nombor titik tetap, memastikan ketepatan yang tepat.
Menukar kepada PERPULUHAN
Untuk menukar lajur apungan sedia ada kepada PERPULUHAN, gunakan ALTER JADUAL pernyataan:
ALTER TABLE users MODIFY points DECIMAL(6,2);
Ini akan menukar mata kepada lajur perpuluhan dengan 6 jumlah digit dan 2 tempat perpuluhan. Anda boleh melaraskan ketepatan dan skala mengikut keperluan.
Kesimpulan
Walaupun apungan mungkin kelihatan mudah, ketidaktepatan yang wujud dalam aritmetik titik terapung boleh membawa kepada hasil yang tidak dijangka apabila membandingkan nilai. Untuk perwakilan perpuluhan yang tepat dan perbandingan yang tepat, sangat disyorkan untuk menggunakan jenis data PERPULUHAN dalam MySQL. Dengan menggunakan DECIMAL, anda boleh mengelakkan kemungkinan perangkap perbandingan titik terapung dan memastikan kebolehpercayaan data anda.
Atas ialah kandungan terperinci Mengapa Perbandingan Titik Terapung dalam MySQL Tidak Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!