Rumah >Java >javaTutorial >Bagaimana untuk Mengelakkan Ralat Ketepatan dalam Java Double Aritmetik?

Bagaimana untuk Mengelakkan Ralat Ketepatan dalam Java Double Aritmetik?

Susan Sarandon
Susan Sarandonasal
2024-12-10 00:38:08271semak imbas

How to Avoid Precision Errors in Java Double Arithmetic?

Cara Menghapuskan Isu Ketepatan dengan Java Double Aritmetik

Dalam senario tertentu, aritmetik titik terapung di Jawa boleh membawa kepada isu pembundaran yang tidak dijangka, seperti seperti dalam contoh penolakan yang disediakan:

double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;
double netToCompany = targetPremium.doubleValue() - tempCommission;
double dCommission = request.getPremium().doubleValue() - netToCompany;

Di sini, hasil yang diingini untuk dCommission ialah 877.85, tetapi ia sebaliknya dikira sebagai 877.8499999999999. Percanggahan ini timbul disebabkan oleh pengehadan ketepatan dalam aritmetik titik terapung.

Untuk menyelesaikan isu ini, penyelesaian optimum ialah menggunakan kelas java.math.BigDecimal. BigDecimal menawarkan pengiraan yang tepat dan mengawal ketepatan aritmetik titik terapung dengan berkesan. Begini cara anda boleh melaksanakannya dalam contoh yang diberikan:

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

Kod ini menghasilkan output yang diingini:

877.85 = 1586.6 - 708.75

Dengan menggunakan BigDecimal, anda memastikan pengiraan yang tepat tanpa menjejaskan ketepatan.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat Ketepatan dalam Java Double Aritmetik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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