Rumah > Java > javaTutorial > Cara Mengelakkan Ralat Ketepatan Titik Terapung di Java: Terapung, Beregu dan Perpuluhan Besar

Cara Mengelakkan Ralat Ketepatan Titik Terapung di Java: Terapung, Beregu dan Perpuluhan Besar

Susan Sarandon
Lepaskan: 2024-11-18 04:43:02
asal
836 orang telah melayarinya

How to Avoid Floating Point Precision Errors in Java: Floats, Doubles, and BigDecimal

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

Output yang dijangkakan:

0.1
0.2
0.3
...
0.9
Salin selepas log masuk
Salin selepas log masuk

Keluaran sebenar:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
Salin selepas log masuk

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

Kod ini akan dicetak :

0.1
0.2
0.3
...
0.9
Salin selepas log masuk
Salin selepas log masuk

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!

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