Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Bergelut dengan Membandingkan Nilai Titik Terapung?

Mengapa MySQL Bergelut dengan Membandingkan Nilai Titik Terapung?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-07 19:47:031001semak imbas

Why Does MySQL Struggle with Comparing Floating-Point Values?

Kesalahan MySQL dalam Membandingkan Nilai Titik Terapung

Pengiraan titik terapung dalam MySQL boleh membawa kepada perbandingan yang salah disebabkan oleh had ketepatan yang wujud. Untuk menangani isu ini, pertimbangkan untuk menggunakan jenis PERPULUHAN.

Ketepatan Intrinsik Aritmetik Titik Terapung

Nombor titik terapung disimpan dengan ketepatan terhad, yang boleh memperkenalkan sedikit ketidaktepatan semasa pengiraan. Sebagai contoh, pertimbangkan nombor 50.12 yang disimpan sebagai apungan dalam MySQL:

CREATE TABLE users (points FLOAT);
INSERT INTO users (points) VALUES (50.12);

Apabila membandingkan nilai ini dengan 12.75 menggunakan operator >, MySQL mengembalikan "False," walaupun 50.12 lebih besar daripada 12.75.

SELECT COUNT(*) FROM users WHERE points > 12.75;

Kelebihan PERPULUHAN

Untuk mengelakkan ketidakkonsistenan tersebut, jenis data PERPULUHAN menyediakan ketepatan dan skala tetap, memastikan pengiraan dan perbandingan adalah tepat. Contohnya:

ALTER TABLE users MODIFY COLUMN points DECIMAL(6,2);
UPDATE users SET points = 50.12;
SELECT COUNT(*) FROM users WHERE points > 12.75;

Kini, perbandingan mengembalikan "Benar," seperti yang dimaksudkan.

Pertimbangan Tambahan

  • Gunakan LALAI kata kunci untuk menentukan nilai lalai bagi lajur titik terapung, mengelakkan nilai NULL.
  • Pertimbangkan untuk menggunakan fungsi ROUND() atau TRUNCATE() sebelum melakukan perbandingan untuk mengurangkan ralat pembundaran.

Atas ialah kandungan terperinci Mengapa MySQL Bergelut dengan Membandingkan Nilai Titik Terapung?. 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