Java中的计算问题

Sil*_*ker 7 java floating-point double

我在Java中执行计算时遇到了一些困难.这是我想要做的 -

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

在我的java应用程序中,它返回26.264999999999997,如果你向上舍入到2位小数,则变为26.26.

但在MS Excel中,相同的公式返回26.265000 ..因此舍入结果为26.27.

如果我的Java应用程序返回的值不正确,我该怎么做才能纠正它?

Jim*_*son 6

请参阅我的答案,了解正在发生的事情.


RMo*_*sey 4

以下是一个更好的近似值,在这种情况下会产生相同的值:

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));
    }
}
Run Code Online (Sandbox Code Playgroud)