首页 > 解决方案 > 删除不必要的舍入

问题描述

我如何得到正确的非舍入结果,就像我在 excel 中得到的那样?

public void testdivide_largenumber() {
    double result;
    double number = 8789700;
    double divisor = 3200;
    BigDecimal number_BD = new BigDecimal(number, MathContext.DECIMAL64);
    BigDecimal divisor_BD = new BigDecimal(divisor, MathContext.DECIMAL64);

    BigDecimal result_BD;

    result = (double) (number / divisor);
    result_BD = number_BD.divide(divisor_BD);

    System.out.println("double result should be 2746.78124999656="+ result );
    System.out.println("BigDecimal result should be 2746.78124999656="+ result_BD );
}

结果:

double结果应该是2746.78124999656=2746.78125

BigDecimal结果应该是2746.78124999656=2746.78125

标签: javadecimalrounding

解决方案


正如@Lino 在他的评论中指出的那样,8789700/3200 = 2746.78125. 你从excel得到的结果有浮点舍入错误,java是正确的。


推荐阅读