Rumah >Java >javaTutorial >Mengapa Anda Tidak Harus Menggunakan == untuk Membandingkan Terapung di Jawa?

Mengapa Anda Tidak Harus Menggunakan == untuk Membandingkan Terapung di Jawa?

Patricia Arquette
Patricia Arquetteasal
2024-12-18 06:54:14285semak imbas

Why Shouldn't You Use == to Compare Floats in Java?

Soalan: Perangkap Penggunaan == untuk Perbandingan Terapung di Jawa

Walaupun kehadirannya sebagai pengendali kesamaan untuk nombor titik terapung di Jawa , == mempunyai had apabila membandingkan terapung, seperti yang dibuktikan oleh amaran analisis statik seperti "JAVA0078 Nilai titik terapung berbanding dengan ==".

Jawapan: Masalah Ketepatan

Nombor titik terapung disimpan sebagai anggaran dan ralat pembundaran boleh berlaku semasa operasi. Akibatnya, menggunakan == untuk membandingkan dua apungan mungkin menghasilkan negatif atau positif palsu.

Pendekatan Betul: Margin Toleransi

Pendekatan yang betul untuk membandingkan apungan untuk "kesamaan" melibatkan ujian jika perbezaan mutlak antara mereka adalah lebih kecil daripada nilai toleransi yang telah ditetapkan. Ini memastikan bahawa perbandingan mengambil kira ralat pembundaran dan sepadan dengan ketepatan yang dimaksudkan:

if(Math.abs(sectionID - currentSectionID) < epsilon)

Pemilihan Nilai Epsilon

Memilih nilai epsilon yang sesuai bergantung pada ketepatan yang diingini. Untuk perbandingan yang tepat, nilai epsilon yang lebih kecil digunakan, manakala nilai epsilon yang lebih besar membolehkan margin ralat yang lebih luas.

Atas ialah kandungan terperinci Mengapa Anda Tidak Harus Menggunakan == untuk Membandingkan Terapung di Jawa?. 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