Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将双精度整数四舍五入到最接近的偶数_Java_Math - Fatal编程技术网

Java 如何将双精度整数四舍五入到最接近的偶数

Java 如何将双精度整数四舍五入到最接近的偶数,java,math,Java,Math,我想将一个双精度值舍入到下一个偶数整数。e、 g: 489.5435至490 2.7657至2 我试过Math.rint(),但它给我的是489而不是490 double foo = 3.7754; int nextEven; if (((int)foo)%2 == 0) nextEven = (int)foo; else nextEven = ((int)foo) + 1; 可能会做您需要的事情只需: public static long roundEven(doubl

我想将一个双精度值舍入到下一个偶数整数。e、 g:

  • 489.5435至490
  • 2.7657至2
我试过
Math.rint()
,但它给我的是489而不是490

double foo = 3.7754;
int nextEven;

if (((int)foo)%2 == 0)
    nextEven = (int)foo;
else
    nextEven = ((int)foo) + 1;
可能会做您需要的事情

只需:

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 
尝试
Math.ceil(…)

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

您还可以使用
Math.floor(…)
。。唯一的区别是,如果地板不均匀,您必须舍入天花板(结果加1)

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

为什么
489.5435
被提升到下一个整数值,而
2.7657
只得到计算的整数部分?你有没有尝试过“Math.ceil(double)”?你说的“下一个直数”是指最近的偶数?是的,我需要一个偶数(x%y=0)。@MuratK。是的,它是。。。它根据需要给出4。他不想让数字四舍五入,但他想得到下一个偶数^^^@MuratK。根据SO 2.7657应变为2。所以4.8应该变成4。。。这是最接近4.8的偶数。不幸的是,我还不允许使用if/else。我们“还不知道”。大学,第一学期…@Jannis那么你应该看看Jean Logeart的答案!他可以不用if/else来做这件事;)
int roundToNextEven(double d) {
    int hlp = (int)Math.floor(d);
    if (hlp%2 == 0)
        return hlp;
    return hlp+1;
}