如何测试double是否为整数

问题

是否有可能做到这一点?

double variable;
variable = 5;
/* the below should return true, since 5 is an int. 
if variable were to equal 5.7, then it would return false. */
if(variable == int) {
    //do stuff
}

我知道代码可能不会那样,但是怎么样?


#1 热门回答(164 赞)

或者你可以使用模运算符:
(d % 1) == 0


#2 热门回答(100 赞)

if ((variable == Math.floor(variable)) && !Double.isInfinite(variable)) {
    // integer type
}

这将检查double的向下舍入值是否与double相同。

你的变量可以有一个int或double值而且Math.floor(variable)always有一个int值,所以如果你的变量等于Math.floor(variable)那么它必须有一个int值。

如果变量的值是无穷大或负无穷大,这也不起作用,因此在条件中添加"只要变量不是无限的"。


#3 热门回答(68 赞)

番石榴:DoubleMath.isMathematicalInteger。 (披露:我写过它。)或者,如果你还没有进口番石榴,x == Math.rint(x)是最快的方法; rintfloorceil快得多。