gpt4 book ai didi

java - Java 中的 BigDecimal : How to round to 10?

转载 作者:行者123 更新时间:2023-12-03 23:58:19 25 4
gpt4 key购买 nike

我想将 BigDecimal 数字向上或向下舍入到 10:

112 --> 110

117 --> 120

150 --> 150

115 --> 120

114.9 --> 110

67 --> 70

64 --> 60

等等

我试过这个:

number = number.round(new MathContext(1, RoundingMode.HALF_UP));

11 —> 10

150 —> 200//错误!应该是150!

48 —> 50

500 —> 500

250 —> 300//错误!应该是250!

240 —> 200//错误!应该是240!

245 —> 200//错误!应该是250!

51 -> 50

我已经尝试了其他几个精度值,但我从来没有对所有值进行正确的舍入。

我在这里缺少什么?

最佳答案

您遗漏了用于执行舍入的 MathContext 对象指定了舍入结果的精度(== 有效位数),而不是小数位数(与最低有效位的位值有关)。更一般地说,BigDecimal.round() 是关于管理数字精度的,这不是您所追求的。

您可以通过设置 scaleBigDecimal 四舍五入到任何给定的 10 次幂的最接近倍数。要四舍五入到最接近的 10 的倍数,那就是:

number = number.setScale(-1, RoundingMode.HALF_UP));

请注意,如果初始比例小于 -1,则会导致数字精度增加(通过添加重要的尾随零)。如果您不想这样,请测试比例尺 (BigSecimal.scale()) 以确定是否舍入。

关于java - Java 中的 BigDecimal : How to round to 10?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com