Home >Java >javaTutorial >How Can I Avoid Rounding Errors When Calculating with Doubles in Java?

How Can I Avoid Rounding Errors When Calculating with Doubles in Java?

Susan Sarandon
Susan SarandonOriginal
2024-12-22 05:11:14483browse

How Can I Avoid Rounding Errors When Calculating with Doubles in Java?

Resolving Java Double Rounding Issues

In Java, performing calculations with double-precision floating-point numbers can sometimes lead to unexpected results due to rounding errors. To address this issue, it's essential to understand Java's floating-point arithmetic and adopt appropriate solutions.

When subtracting double values, small rounding errors may accumulate, resulting in incorrect calculations. Consider the following code snippet:

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

In this example, the expected commission result is 877.85, but the calculation yields 877.8499999999999 due to rounding errors.

Solution: Using BigDecimal

To ensure accurate calculations, it's recommended to use java.math.BigDecimal. This class provides precision floating-point arithmetic that addresses the limitations of double data types.

Rewriting the last line of code using BigDecimal:

BigDecimal commission = premium.subtract(netToCompany);

This approach eliminates rounding errors and produces the correct result:

System.out.println(commission + " = " + premium + " - " + netToCompany);

Output:

877.85 = 1586.6 - 708.75

The above is the detailed content of How Can I Avoid Rounding Errors When Calculating with Doubles in Java?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn