Java中的计算问题

时间:2011-06-03 02:20:25

标签: 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应用程序返回的值不正确,我该怎么做才能纠正它?

2 个答案:

答案 0 :(得分:6)

有关正在发生的事情的说明,请参阅my answer here

答案 1 :(得分: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));
    }
}