Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Membandingkan Nilai Berganda dalam Java dengan Selamat untuk Mengelakkan Ralat Ketepatan?
Bahaya Ketepatan Perbandingan Berganda di Jawa dan Penyelesaiannya
Membandingkan nilai berganda di Jawa boleh menjadi tugas yang mengelirukan. Perbandingan naif, seperti yang digambarkan di bawah, mungkin menghasilkan keputusan yang tidak dijangka disebabkan oleh pengehadan ketepatan titik terapung:
double a = 1.000001; double b = 0.000001; if ((a-b) == 1.0) { // This condition evaluates to false, though it seemingly should be true. }
Isu timbul kerana penolakan a-b tidak mengembalikan tepat 1.0, tetapi nilai yang sangat hampir dengannya. Aritmetik titik terapung boleh memperkenalkan ralat pembundaran, menghasilkan nilai 0.9999999999999999, yang tidak bersamaan dengan 1.0.
Untuk mengelakkan perangkap ini, adalah disyorkan untuk menggunakan perbandingan anggaran dan bukannya perbandingan yang tepat. Kaedah Math.abs() boleh digunakan untuk mengira perbezaan mutlak antara hasil sebenar dan nilai yang dijangkakan, dan perbezaan ini boleh dibandingkan dengan nilai toleransi yang kecil:
double c = a-b; if (Math.abs(c-1.0) <= 0.000001) { // This condition evaluates to true, as the absolute difference is small enough. }
Dengan menetapkan toleransi yang sesuai nilai, anda boleh mengawal tahap ketepatan yang boleh diterima untuk perbandingan. Pendekatan ini membolehkan anda mengendalikan had ketepatan titik terapung dengan berkesan dan memastikan penilaian yang tepat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Nilai Berganda dalam Java dengan Selamat untuk Mengelakkan Ralat Ketepatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!