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
Release: 2024-12-22 05:11:14
Original
522 people have browsed it

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;
Copy after login

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);
Copy after login

This approach eliminates rounding errors and produces the correct result:

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

Output:

877.85 = 1586.6 - 708.75
Copy after login

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 of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template