如何将双精度舍入到最接近的偶数

时间:2015-10-06 13:28:25

标签: java math

我想将double值舍入到下一个偶数整数。例如:

  • 489.5435至490
  • 2.7657至2

我尝试了Math.rint(),但它给了我489而不是490.

3 个答案:

答案 0 :(得分:9)

简单地:

public static long roundEven(double d) {
    return Math.round(d / 2) * 2;
}

给出:

System.out.println(roundEven(2.999));  // 2 
System.out.println(roundEven(3.001));  // 4 

答案 1 :(得分:0)

double foo = 3.7754;
int nextEven;

if (((int)foo)%2 == 0)
    nextEven = (int)foo;
else
    nextEven = ((int)foo) + 1;

可能会做你需要的事情

答案 2 :(得分:0)

尝试Math.ceil(...)

int roundToNextEven(double d) {
    int hlp = (int)Math.ceil(d);
    if (hlp%2 == 0)
        return hlp;
    return hlp-1;
}

这个想法是,如果下一个天花板浮动不均匀,我们必须倒圆而不是圆形到天花板。

您也可以使用Math.floor(...) ..唯一的区别是,如果地板不均匀,您必须舍入到ceil(在结果中加1)

int roundToNextEven(double d) {
    int hlp = (int)Math.floor(d);
    if (hlp%2 == 0)
        return hlp;
    return hlp+1;
}