Cara Mengatasi Anomali Berganda Pembundaran Java
Di Java, pengiraan titik terapung kadangkala boleh mengakibatkan isu pembundaran yang tidak dijangka. Untuk menggambarkan, mari kita periksa kod berikut:
double tempCommission = targetPremium.doubleValue() * rate.doubleValue() / 100d; double netToCompany = targetPremium.doubleValue() - tempCommission; double dCommission = request.getPremium().doubleValue() - netToCompany;
Nilai jangkaan untuk dCommission ialah 877.85, tetapi keputusan sebenar tidak tepat sedikit pada 877.8499999999999. Untuk menyelesaikan isu ini, kita perlu menggunakan pengiraan yang lebih tepat.
Penyelesaian terletak pada penggunaan java.math.BigDecimal. Kelas ini menyediakan kawalan ke atas ketepatan aritmetik titik terapung. Berikut ialah versi kod yang dikemas kini menggunakan BigDecimal:
import java.math.BigDecimal; BigDecimal premium = BigDecimal.valueOf("1586.6"); BigDecimal netToCompany = BigDecimal.valueOf("708.75"); BigDecimal commission = premium.subtract(netToCompany); System.out.println(commission + " = " + premium + " - " + netToCompany);
Dengan BigDecimal, hasilnya menggambarkan nilai yang dijangkakan dengan tepat:
877.85 = 1586.6 - 708.75
Atas ialah kandungan terperinci Mengapa Java's Double Menghasilkan Pembundaran Tidak Tepat, dan Bagaimana BigDecimal Boleh Menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!