小编use*_*776的帖子

BigDecimal - 意外的舍入行为

我想我发现了一个错误:

MathContext mathContext = new MathContext(5, RoundingMode.HALF_UP);
result = BigDecimal.valueOf(0.004798).round(mathContext); // fails
// result is 0.004798!!! (same value)
Run Code Online (Sandbox Code Playgroud)

我不得不使用以下替代方案:

BigDecimal bigDecimal = BigDecimal.valueOf(0.004798);
BigDecimal new_divisor = BigDecimal.valueOf(1, 5);
bigDecimal_array = bigDecimal.divideAndRemainder(new_divisor);
MathContext mathContext = new MathContext(5, RoundingMode.HALF_UP);
result = bigDecimal.subtract(bigDecimal_array[1], mathContext);
result = result.stripTrailingZeros();
Run Code Online (Sandbox Code Playgroud)

在我看来,这个错误(如果是这样的话)非常危险。

java bigdecimal

0
推荐指数
1
解决办法
223
查看次数

标签 统计

bigdecimal ×1

java ×1