mrd*_*mrd 3 java rounding bigdecimal
我想将 BigDecimal 数字向上或向下舍入 10:
\n\n112 --> 110
\n\n117 --> 120
\n\n150 --> 150
\n\n115 --> 120
\n\n114.9 --> 110
\n\n67 --> 70
\n\n64 --> 60
\n\nETC。
\n\n我试过这个:
\n\nnumber = number.round(new MathContext(1, RoundingMode.HALF_UP));
11 \xe2\x80\x94> 10
\n\n150 \xe2\x80\x94> 200 // 错误!应该是150!
\n\n48 \xe2\x80\x94> 50
\n\n500 \xe2\x80\x94> 500
\n\n250 \xe2\x80\x94> 300 // 错误!应该是250!
\n\n240 \xe2\x80\x94> 200 // 错误!应该是240!
\n\n245 \xe2\x80\x94> 200 // 错误!应该是250!
\n\n51 -> 50
\n\n我已经尝试了其他几个值的精度,但我从未对所有值进行正确的舍入。
\n\n我在这里缺少什么?
\n您缺少MathContext执行舍入的对象指定舍入结果的精度(== 有效数字的数量),而不是比例(与最低有效数字的位置值相关)。更一般地说,BigDecimal.round()都是关于管理数字的精度,这不是您所追求的。
您可以BigDecimal通过设置 a 的小数位数将 a 舍入到任何给定 10 次幂的最接近的倍数。要四舍五入到最接近的 10 本身的倍数,则为:
number = number.setScale(-1, RoundingMode.HALF_UP));
Run Code Online (Sandbox Code Playgroud)
请注意,如果初始小数位数小于 -1,则会导致数字精度增加(通过添加有效的尾随零)。如果您不希望这样,请测试比例 ( BigSecimal.scale()) 以确定是否四舍五入。
| 归档时间: |
|
| 查看次数: |
4627 次 |
| 最近记录: |