Mengelakkan Ralat Ketepatan Titik Terapung dengan Terapung dan Beregu di Jawa
Apabila bekerja dengan sejumlah besar terapung atau berganda di Jawa, mengumpul takat terapung ralat ketepatan boleh menjadi isu. Ralat ini timbul kerana ketidakupayaan apungan atau gandaan untuk mewakili nilai berangka tertentu dengan tepat, seperti 0.1.
Pertimbangkan kod berikut:
for (float value = 0.0f; value < 1.0f; value += 0.1f) { System.out.println(value); }
Output yang dijangkakan:
0.1 0.2 0.3 ... 0.9
Keluaran sebenar:
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.70000005 0.8000001 0.9000001
Seperti yang terbukti, keluaran menyimpang daripada nilai yang dijangkakan disebabkan oleh ketidaktepatan titik terapung. Untuk menyelesaikan isu ini, terdapat dua pendekatan utama:
1. Laraskan Ketepatan Paparan dan Benarkan Toleransi
Apabila menggunakan jenis berganda, hadkan paparan kepada bilangan digit yang diperlukan dan perkenalkan toleransi yang kecil untuk semakan kesaksamaan. Ini membolehkan perwakilan nombor seperti 0.1 tanpa ralat pembundaran yang ketara.
2. Gunakan BigDecimal untuk Perwakilan Tepat
Sebagai alternatif, pertimbangkan untuk menggunakan BigDecimal dan bukannya apungan atau beregu. BigDecimal menyediakan cara untuk mewakili nombor dengan ketepatan arbitrari, menghapuskan ralat pembundaran dan membenarkan perwakilan tepat bagi nilai seperti 0.1.
Di bawah ialah contoh menggunakan BigDecimal:
BigDecimal step = new BigDecimal("0.1"); for (BigDecimal value = BigDecimal.ZERO; value.compareTo(BigDecimal.ONE) < 0; value = value.add(step)) { System.out.println(value); }
Kod ini akan dicetak :
0.1 0.2 0.3 ... 0.9
Dengan memilih pendekatan yang sesuai, pembangun boleh meminimumkan atau hapuskan ralat ketepatan titik terapung apabila bekerja dengan terapung atau beregu dalam Java.
Atas ialah kandungan terperinci Cara Mengelakkan Ralat Ketepatan Titik Terapung di Java: Terapung, Beregu dan Perpuluhan Besar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!