Calculation problem in Java

2019-01-26 10:58发布

问题:

I'm having slight difficulty in performing a calculation in Java. Here is what I'm trying to do -

((0.053800 * (500000/1000)) + 4) * 0.85

In my java application, it returns 26.264999999999997, which if you round up to 2 decimal places, becomes 26.26.

But in MS Excel, the same formula returns 26.265000.. and therefore the rounded result is 26.27.

If my Java application is returning incorrect value, what can I do to correct it?

回答1:

The following is a much better approximation, which results in the same value in this case:

import java.math.BigDecimal;
import java.math.MathContext;

public class Test {
    public static void main(String[] args) {
        //double d = ((0.053800 * (500000/1000)) + 4) * 0.85;
        BigDecimal d = ((new BigDecimal(0.053800).multiply(new BigDecimal(500000).divide(new BigDecimal(1000)))).add(new BigDecimal(4))).multiply(new BigDecimal(0.85));
        System.out.println(d.round(MathContext.DECIMAL32));
    }
}


回答2:

See my answer here for an explanation of what's going on.