Rumah > Java > javaTutorial > teks badan

Bagaimanakah Saya Boleh Mengelak Ralat Pembundaran Apabila Mengalihkan Tempat Perpuluhan di Java Menggunakan Jenis Data DoubleDouble?

Barbara Streisand
Lepaskan: 2024-11-24 19:24:16
asal
975 orang telah melayarinya

How Can I Avoid Rounding Errors When Shifting Decimal Places in Java Using DoubleDouble Data Types?

Ralat Membundarkan dalam "Memindahkan Tempat Perpuluhan" dengan Berganda

Jenis data berganda dalam Java kadangkala boleh menyebabkan ketidaktepatan semasa menjalankan operasi matematik. Apabila cuba mengalihkan tempat perpuluhan, seperti yang digambarkan dalam soalan, ralat pembundaran boleh berlaku.

Isu timbul daripada fakta bahawa nombor titik terapung berketepatan dua tidak boleh mewakili semua nombor nyata dengan tepat. Dalam kes ini, percubaan untuk mendarab dengan 0.1 dua kali memperkenalkan ralat pengkompaunan.

Penyelesaian menggunakan Pembahagian Integer:

Untuk mengelakkan ralat ini, adalah disyorkan untuk menggunakan pembahagian integer sebaliknya . Dengan membahagikan dengan 100, anda boleh mengalihkan tempat perpuluhan dengan berkesan tanpa memperkenalkan ralat pembundaran.

double x = 1234;
x /= 100;
System.out.println(x); // Prints 12.34
Salin selepas log masuk

Ralat Pembundaran lwn. Pembundaran:

Adalah penting untuk ambil perhatian bahawa pembundaran mungkin masih berlaku dalam beberapa kes, tetapi ia adalah kurang penting. Double.toString() melakukan pembundaran minimum, tetapi jika anda ingin mengelakkan sebarang pembundaran, sebaiknya gunakan BigDecimal.

Perbandingan Pembahagian vs. Pendaraban:

Walaupun pembahagian dan pendaraban kedua-duanya berkesan mengalihkan tempat perpuluhan, mereka mengendalikan ralat pembundaran secara berbeza. Pembahagian dengan 100 menghasilkan ralat bulat yang bergantung pada nilai x, manakala pendaraban dengan 0.01 memperkenalkan ralat pusingan tetap.

Sebagai contoh, kod berikut menunjukkan ralat pembundaran yang berbeza:

for (int i = 0; i < 200; i++) {
    double d1 = (double) i / 100;
    double d2 = i * 0.01;
    if (d1 != d2)
        System.out.println(d1 + " != " + d2);
}
Salin selepas log masuk

Output menunjukkan bahawa beberapa nilai dibundarkan secara berbeza bergantung pada kaedah digunakan.

Kesimpulan:

Apabila bekerja dengan nombor titik terapung, adalah penting untuk mengetahui potensi ralat pembundaran. Menggunakan pembahagian integer atau BigDecimal boleh membantu meminimumkan ralat ini untuk memastikan hasil yang lebih tepat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelak Ralat Pembundaran Apabila Mengalihkan Tempat Perpuluhan di Java Menggunakan Jenis Data DoubleDouble?. 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