在java中向零舍入

时间:2011-12-05 15:05:44

标签: java

如何将java舍入为零?

因此-1.9变为-1.0且-0.2变为0.0,3.4变为3.0,依此类推。

Math.round()是否有能力改变一些参数?

8 个答案:

答案 0 :(得分:20)

我不相信标准库有这样的功能。

问题是你要求的行为是非常不同的(数学上讲)取决于数字是大于还是小于0(即向上舍入为负值,向下舍入为正值)

可以使用以下方法:

public double myRound(double val) {
    if (val < 0) {
        return Math.ceil(val);
    }
    return Math.floor(val);
}

答案 1 :(得分:9)

像这样长期投射:

float x= 1.9;

long y = (long)x;

这将正数和负数都归零。

答案 2 :(得分:6)

使用RoundingMode.DOWN,它会导致零。

示例:

    BigDecimal value = new BigDecimal("1.4");
    value = value.setScale(0, RoundingMode.DOWN);
    System.out.println(value.doubleValue());
    BigDecimal value1 = new BigDecimal("-1.4");
    value1 = value1.setScale(0, RoundingMode.DOWN);
    System.out.println(value1.doubleValue());

答案 3 :(得分:5)

只需转换为int就能为你做到这一点吗?

编辑:如果你想保留一个双倍,这应该足够简单:

if (val < 0) 
   return -Math.floor(-val);
else
   return Math.floor(val);

对于那些想要分支免费代码并且感觉更聪明的人来说:

long tmp = Double.doubleToLongBits(val);
tmp >>>= 63;
return Math.floor(val) + tmp;

答案 4 :(得分:1)

y=sign(x)*floor(abs(x))

y=sign(x)*round(abs(x)-0.5)

应该很容易用Java实现。

答案 5 :(得分:0)

好像你想要一直向下舍入?您可以使用Math.floor代替

  

public static double floor(double a)

     

返回最大(最接近正无穷大)双精度值   不大于论证,等于数学   整数。特殊情况:

答案 6 :(得分:0)

BigDecimal提供了许多rounding options

答案 7 :(得分:0)

你也可以试试这个:

public static void main(String[] args) {
        Double myDouble = -3.2;
        System.out.println(myDouble.intValue()); //Prints -3

    }