gpt4 book ai didi

java - 使用 setScale() 方法舍入 BigDecimal : unexpected result

转载 作者:行者123 更新时间:2023-12-02 00:19:51 28 4
gpt4 key购买 nike

为了对数字进行四舍五入,我使用以下代码:

public static roundBd(BigDecimal bd){
BigDecimal result1 = bd.setScale(0, RoundingMode.HALF_UP);
return result1;
}
  • 输入 1.50 --> 输出 2
  • 输入 1.499 --> 输出 1

第一个结果对我来说还可以,但第二个结果不是我所期望的。即使对于 1.499,我也希望输出 2。(详细信息:首先我想将 1.499 舍入为 1.50,然后舍入为 1.5,最后舍入为 2)

但是......

BigDecimal bd = new BigDecimal("1.499");  // I'd like to round it to 2
BigDecimal result1 = bd.setScale(2, RoundingMode.HALF_UP); // result1 == 1.50
BigDecimal result2 = bd.setScale(1, RoundingMode.HALF_UP); // result2 == 1.5
BigDecimal result3 = bd.setScale(0, RoundingMode.HALF_UP); // result3 == 1

最佳答案

这不是舍入的工作方式。 HALF_UP 表示如果某个数字正好位于两个最接近的可用值之间的中间(取决于比例),则该数字将向上舍入。其他任何值都会四舍五入到最接近的值。

摘自the javadoc :

Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant

为了达到您需要的行为,您可以连续舍入,尽管我不确定为什么您想要这样的行为:

BigDecimal bd = new BigDecimal("1.499");  // I'd like to round it to 2
BigDecimal result1 = bd.setScale(2, RoundingMode.HALF_UP); // result1 == 1.50
BigDecimal result2 = result1.setScale(0, RoundingMode.HALF_UP); // result2 == 2

关于java - 使用 setScale() 方法舍入 BigDecimal : unexpected result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11241155/

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