Java: BigDecimal 四舍五入百万数

Java: BigDecimal round up for million number

我有一个计算 17780.00 x 115.00 的方法,结果应该是 2044700.00,但是,该方法计算出的结果是 2045000.00(似乎是四舍五入的整数)。此方法还将处理带小数的数字,例如。 0.97 x 0.5。代码如下所示:

  public Double multiplyNumber(Double d1, Double d2) {

     return new BigDecimal(d1).multiply(
           new BigDecimal(d2), 
           new MathContext(4, RoundingMode.HALF_UP)).doubleValue(); 
  }

请指教如何让代码计算出正确的结果。谢谢!

四舍五入只处理小数点后的数字。向左舍入、除法、舍入、乘法:

public Double multiplyNumber(Double d1, Double d2) {
    return new BigDecimal(d1)
            .multiply(new BigDecimal(d2))
            .divide(BigDecimal.TEN.pow(3), new MathContext(0, RoundingMode.HALF_UP))
            .multiply(BigDecimal.TEN.pow(3))
            .doubleValue();
}

顺便说一句,这也会产生你想要的值:

public Double multiplyNumber(Double d1, Double d2) {
    return d1 * d2;
}

你试试运行这个。

public class Test {

    public static void main(String... strings)  {

        System.out.println("result "+multiplyNumber(17780.00, 115.00) );
    }

    public static Double multiplyNumber(Double d1, Double d2) {

         return new BigDecimal(d1).multiply(
               new BigDecimal(d2)).setScale(4, RoundingMode.HALF_UP).doubleValue(); 
    }
    
}

改用下面的 return 语句:

return new BigDecimal(d1).multiply(new BigDecimal(d2)).round(new MathContext(4, RoundingMode.HALF_UP)).doubleValue();