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

Mengapa MySQL Bergelut dengan Membandingkan Nilai Titik Terapung?

Mary-Kate Olsen
Lepaskan: 2024-11-07 19:47:03
asal
999 orang telah melayarinya

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);
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan