如何在Java中从零舍入两倍的整数?
我知道的操作不执行我想要的操作:
将其投射到(int)
会将其舍入为零。 (int) 3.7
将为3
,(int) - 3.9
将为-3
。
Math.floor()
向负无穷大舍入。 Math.ceil(3.7)
将是3.0
,Math.ceil(-3.9)
将是-4.0
。
Math.ceil()
四舍五入为正无穷大。 Math.floor(3.7)
将是4.0
,Math.ceil(-3.9)
将是-3.0
。Math.round()
舍入到最接近的整数。但是我没有四舍五入的东西,使得3.7
变成4.0
,而-3.9
变成-4.0
。
Java中有这样的功能吗?
检查号码的符号:
double roundedAway = (num >= 0) ? Math.ceil(num) : Math.floor(num)
您可以根据数字的正负来实现自己的功能,也可以使用RoundingMode。它可以通过UP
显式舍入为零。可能看起来像这样
DecimalFormat df = new DecimalFormat("#.#");
df.setRoundingMode(RoundingMode.UP);
System.out.println(df.format(number_here));
可以用RoundingMode
和RoundingMode
完成:
BigDecimal
注意:这会将BigDecimal
转换为精确值加倍的double roundAway(double value) {
return new BigDecimal(value).setScale(0, RoundingMode.UP).doubleValue();
}
。为避免这种情况,可以使用double
代替构造函数,该构造函数将使用double的规范字符串表示形式,但是由于您要将其舍入为整数,因此这将涉及不必要的字符串转换。有关更多详细信息,请参见BigDecimal
。