将BigDecimal四舍五入为整数值

36

我有一个值为450.90的BigDecimal,我想将其四舍五入到下一个整数值,然后输出整数值而不带任何小数点,就像这样:

Val: 450.90 -> Rounded: 451.00 -> Output: 451

Val: 100.00001 -> Rounded: 101.00000 -> Output: 101

查看了一些解决方案,但并没有得到预期的结果,以下是我的代码;

BigDecimal value = new BigDecimal(450.90);
value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP
return value.intValue();

谢谢!


你在示例中忽略了 setScale。 - Kenneth Clark
3
你的意思是像这样吗?(int) Math.ceil(450.90) - Peter Lawrey
5个回答

76

setScale 返回一个新的BigDecimal对象,它不会改变你调用它的实例。因此,请将返回值赋回给value

value = value.setScale(0, RoundingMode.UP);

实时示例

我还将其更改为RoundingMode.UP,因为您说您总是想向上取整。但根据您的需求,您可能需要使用RoundingMode.CEILING; 这取决于您希望-451.2变成什么(-452 [UP]或-451 [CEILING])。有关更多信息,请参见RoundingMode


1
太好了!这确实解决了我的问题。我不会使用负数,所以RoundingMode.Up就可以很好地工作!谢谢 - Rodrigo Martinez
@RodrigoMartinez:很高兴能帮上忙。 - T.J. Crowder
1
不起作用(我总是得到451.0,但我需要得到451) - Black_Zerg
@Black_Zerg:那么你一定没有做上面的事情;请查看实时示例 - T.J. Crowder

6

使用:

value.setScale(0, RoundingMode.CEILING);

2

方法说明:

需要注意的是,由于BigDecimal对象是不可变的,调用setScale方法不会修改原始对象,这与通常命名为setX的方法改变字段X的惯例相反。相反,setScale返回一个具有适当比例的对象;返回的对象可能是新分配的,也可能不是。

public void test() {
  BigDecimal value = new BigDecimal(450.90);
  System.out.println(value.setScale(0, RoundingMode.HALF_UP)); // prints 451
}

1

你需要使用返回的值

BigDecimal value = new BigDecimal(450.90);
value = value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP

请注意BigDecimal是不变的。
缩放/舍入操作(setScale和round)返回一个BigDecimal,其值大约(或完全)等于操作数,但其比例或精度为指定值;也就是说,它们增加或减少存储数字的精度,对其值影响最小。

-1

使用Math.ceil()函数。该方法返回大于或等于参数的最小整数。

您可以在这里了解更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接