Java:函数舍入为零?

问题描述 投票:6回答:3

如何在Java中从零舍入两倍的整数?

我知道的操作不执行我想要的操作:

  • 将其投射到(int)会将其舍入为零。 (int) 3.7将为3(int) - 3.9将为-3

  • Math.floor()向负无穷大舍入。 Math.ceil(3.7)将是3.0Math.ceil(-3.9)将是-4.0

  • Math.ceil()四舍五入为正无穷大。 Math.floor(3.7)将是4.0Math.ceil(-3.9)将是-3.0
  • Math.round()舍入到最接近的整数。

但是我没有四舍五入的东西,使得3.7变成4.0,而-3.9变成-4.0

Java中有这样的功能吗?

java rounding
3个回答
8
投票

检查号码的符号:

double roundedAway = (num >= 0) ? Math.ceil(num) : Math.floor(num)

3
投票

您可以根据数字的正负来实现自己的功能,也可以使用RoundingMode。它可以通过UP

显式舍入为零。

可能看起来像这样

DecimalFormat df = new DecimalFormat("#.#");
df.setRoundingMode(RoundingMode.UP);
System.out.println(df.format(number_here));

1
投票

可以用RoundingModeRoundingMode完成:

BigDecimal

注意:这会将BigDecimal转换为精确值加倍的double roundAway(double value) { return new BigDecimal(value).setScale(0, RoundingMode.UP).doubleValue(); } 。为避免这种情况,可以使用double代替构造函数,该构造函数将使用double的规范字符串表示形式,但是由于您要将其舍入为整数,因此这将涉及不必要的字符串转换。有关更多详细信息,请参见BigDecimal

© www.soinside.com 2019 - 2024. All rights reserved.