【问题标题】:java.lang.ArithmeticException: Non-terminating decimal expansionjava.lang.ArithmeticException:非终止十进制扩展
【发布时间】:2015-07-31 03:39:45
【问题描述】:
if (builderAggregateCalculationsType == AggregateCalculationsType.AGGREGATE_AVERAGE) {
            BigDecimal quarterDivisor = new BigDecimal(3);
            quarterDivisor = quarterDivisor.setScale(
                    aggregateCalculationsNumberOfDecimalPlaces,
                    RoundingMode.HALF_UP);
            firstQuarterSum = firstQuarterSum.setScale(
                    aggregateCalculationsNumberOfDecimalPlaces,
                    RoundingMode.HALF_UP);
            secondQuarterSum = secondQuarterSum.setScale(
                    aggregateCalculationsNumberOfDecimalPlaces,
                    RoundingMode.HALF_UP);

            firstQuarterSum = firstQuarterSum.divide(quarterDivisor);
            secondQuarterSum = secondQuarterSum.divide(quarterDivisor);

        }

【问题讨论】:

  • 看到这个异常:原因:java.lang.ArithmeticException:非终止十进制扩展
  • 我只需要将 firstquartersum 和 seconfquatersum 除以 3

标签: java


【解决方案1】:

问题是因为除法结果产生了Non-terminating 分数。像1/3 这样的东西会产生0.3333....,它不会终止。

如果你可以允许一些错误,你可以指定 RoundingMode 并使用它,

firstQuarterSum.divide(quarterDivisor, RoundingMode.HALF_UP); // Or any other rounding mode you prefer.

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 2018-07-28
    • 2016-10-21
    • 1970-01-01
    • 2012-03-04
    • 2014-10-17
    • 1970-01-01
    相关资源
    最近更新 更多