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!