我在Java中执行计算时遇到了一些困难。这是我正在尝试做的事情 -
((0.053800 * (500000/1000)) + 4) * 0.85
在我的java应用程序中,它返回26.264999999999997,如果你向上舍入到2位小数,则变为26.26。
但在MS Excel中,相同的公式返回26.265000 ..因此舍入结果为26.27。
如果我的Java应用程序返回的值不正确,我该怎么做才能纠正它?
答案 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));
}
}