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

Mengapa Perbandingan Titik Terapung dalam MySQL Tidak Tepat?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-10 21:42:02727semak imbas

Why are Floating-Point Comparisons in MySQL Inaccurate?

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!

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