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
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); }
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!