【问题标题】:Java: BigDecimal round up for million number [closed]Java:BigDecimal 向上舍入百万数 [关闭]
【发布时间】:2021-12-12 06:55:00
【问题描述】:

我有一个计算 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(); 
  }

请告知如何使代码计算出正确的结果。谢谢!

【问题讨论】:

  • 查看MathContext 的Javadoc。你认为4 是什么意思?
  • 这能回答你的问题吗? How to convert BigDecimal to Double in Java?
  • @tgdavies 是的,我认为这意味着小数位。如何使它适用于小数位和整数。
  • 我不确定您想要实现什么。 d1 * d2在什么方面没有做你想做的事?
  • @tgdavies 是不是只做 d1*d2 会产生像 9.99999999999 这样的结果?

标签: java rounding bigdecimal


【解决方案1】:

改用下面的 return 语句:

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

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

你试试运行这个。

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(); 
    }
    
}

【讨论】:

  • 这确实有效!那么如果计算结果是9.123456,会不会因为setScale变成4而变成9.1234?
  • 没错,但你想要更多的小数,你改变数字
  • 是的,当乘法的结果是 9.123456 时,我只想要 4 位小数,即 9.1234。非常感谢!
【解决方案3】:

四舍五入只处理小数点后的数字。在左边的地方四舍五入,除法,四舍五入,乘回来:

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;
}

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2013-11-10
    • 2012-02-05
    • 2018-02-11
    相关资源
    最近更新 更多