【问题标题】:Unexpected BigDecimal result. 1 divided by 3 results in 1. Unsure why [duplicate]意外的 BigDecimal 结果。 1除以3的结果是1。不确定为什么[重复]
【发布时间】:2013-01-07 18:56:44
【问题描述】:

可能重复:
Addition for BigDecimal

我觉得我错过了一些明显的东西,但无法弄清楚它是什么。我正在尝试使用BigDecimal 来获取两个数字之间除法的小数部分。一个非常简单的例子,1.00 除以 3.00 应该是 0.(3) 重复。但是,我一直得到 1.00 的结果。

BigDecimal num = new BigDecimal(1.00).setScale(2);
BigDecimal divisor = new BigDecimal(3.00).setScale(2);

num.divide(divisor, BigDecimal.ROUND_HALF_UP);

System.out.print(num);

我的结果是 1.00,我不知道为什么?

【问题讨论】:

    标签: java bigdecimal rounding


    【解决方案1】:

    num.divide 的结果被忽略。您需要将其重新设置为变量

        BigDecimal num = new BigDecimal(1.00).setScale(2);
        BigDecimal divisor = new BigDecimal(3.00).setScale(2);
    
        BigDecimal result = num.divide(divisor, BigDecimal.ROUND_HALF_UP);
    
        System.out.print(result);
    

    这打印0.33

    【讨论】:

    • +1 您必须这样做,因为 BigDecimal(以及它使用的 BigInteger)是不可变的。
    • 啊,谢谢。尽管这是文档中的第一个词,但我完全错过了。
    【解决方案2】:

    BigDecimal 是不可变的。您需要将结果分配给变量。

    【讨论】:

      【解决方案3】:

      num.divide 不会改变 num 它会返回结果。

      试试:

      num = num.divide(divisor, BigDecimal.ROUND_HALF_UP)
      

      【讨论】:

        猜你喜欢
        • 2012-11-02
        • 2013-10-02
        • 2011-06-08
        • 2021-11-17
        相关资源
        最近更新 更多