2015-10-06 28 views
0

我想将double值舍入到下一个偶数整数。例如:如何将一个double加到最接近的偶数

  • 489.5435到490
  • 2.7657至2

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

+0

的[可能的复制圆浮点数到下一个整数值在java](http://stackoverflow.com/questions/8753959/round-a-floating-point-number-to-the-next-integer-value-in-java) –

+3

为什么' 489.5435'被提升到下一个整数值,但是'2.7657'只获得整数部分评估? – npinti

+0

已经试过'Math.ceil(double)'? – pelumi

回答

5

只需:

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 
+0

是的!非常感谢! – Jannis

0
double foo = 3.7754; 
int nextEven; 

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

可能会做什么你需要

+0

不适用于4.8 –

+0

@MuratK。是的,它的确如此......它给出了4个想要的。他不希望数字四舍五入,但他希望得到下一个偶数^^ –

+0

@MuratK。根据SO 2.7657将成为2.所以4.8应该成为4 ...这是最接近的偶数,但不幸的是,我不允许使用if/else来处理4.8 –

0

尝试Math.ceil(...)

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

的想法是,如果下一个上限浮动甚至没有,我们必须舍入到地面,而不是四舍五入到小区。

您还可以使用Math.floor(...) ..唯一的区别是,你必须四舍五入到小区(加1的结果),如果楼层不连

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