【发布时间】:2020-12-14 16:51:13
【问题描述】:
我用BigDecimal 努力获得正确的结果几个小时。
我的号码是 7.7049。我想先四舍五入到 3 位数。我会得到 7.705。然后再四舍五入,到 2 位数。我应该得到 7.71。
我试过了:
BigDecimal(result).setScale(2, RoundingMode.HALF_UP) //instead of 2 can be any other number
但我打错了号码:7.70。
我尝试了不同的模式。我也尝试过valueOf(result.toDouble()),但没有任何效果。
这里的问题看起来像 setScale 在 . 之后只使用最后 2 个数字并忽略其他数字。
我该如何解决这个问题?
更新:
更多示例:
7.7019 必须是 7.70 | 7.7052 必须是 7.71 | 7.7071 必须是 7.71 | 7.7030 必须是 7.70
【问题讨论】:
-
RoundingMode.CEILING怎么样? -
@jrook 不。我需要简单的数学四舍五入,并不总是向上。我的意思是
7.7049必须是7.71但7.7039必须是7.70 -
你知道
RoundingMode.HALF_EVEN是做什么的吗?为什么你会期望 7.7049 变成7.71? “正常”四舍五入将使其变为 7.70,因为 ,049 更接近 ,0 而不是 ,1 -
我不认为有一个舍入模型可以将 7.7049 舍入为 7.71,而是将 7.7039 舍入为 7.71,因为这没有意义。
-
没有一个动作可以按照您描述的方式进行舍入,因为这是一种不寻常且非标准的舍入方式。
标签: java android kotlin scale bigdecimal