double이 정수인지 테스트하는 방법 the below should return true, since

이것을 할 수 있습니까?

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
}

나는 코드가 아마 그런 아무것도하지 않습니다 알고 있지만, 어떻게 않습니다 이 이동?



답변

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

double의 반올림 값이 double과 같은지 확인합니다.

변수는 int 또는 double 값을 가질 수 있고 Math.floor(variable)항상 int 값을 가질 수 있으므로 변수가 같으면 Math.floor(variable)int 값을 가져야합니다.

변수의 값이 무한 또는 음의 무한대 인 경우에도 작동하지 않으므로 조건에 ‘변수가 무한대가 아닌 한’을 추가하십시오.


답변

또는 모듈로 연산자를 사용할 수 있습니다.

(d % 1) == 0


답변

구아바 : DoubleMath.isMathematicalInteger. (공개 : 내가 썼습니다.) 또는 구아바를 아직 수입하지 않은 경우 x == Math.rint(x)가장 빠른 방법입니다. 또는 rint보다 빠릅니다 .floorceil


답변

public static boolean isInt(double d)
{
    return d == (int) d;
}


답변

이렇게 해봐

public static boolean isInteger(double number){
    return Math.ceil(number) == Math.floor(number);
}

예를 들면 다음과 같습니다.

Math.ceil(12.9) = 13; Math.floor(12.9) = 12;

따라서 12.9 는 정수 가 아닙니다.

 Math.ceil(12.0) = 12; Math.floor(12.0) =12; 

따라서 12.0 은 정수입니다


답변

Integer와에 대한 버전은 다음 과 Double같습니다.

    private static boolean isInteger(Double variable) {
    if (    variable.equals(Math.floor(variable)) &&
            !Double.isInfinite(variable)          &&
            !Double.isNaN(variable)               &&
            variable <= Integer.MAX_VALUE         &&
            variable >= Integer.MIN_VALUE) {
        return true;
    } else {
        return false;
    }
}

로 변환 Double하려면 Integer:

Integer intVariable = variable.intValue();


답변

치다:

Double.isFinite (value) && Double.compare (value, StrictMath.rint (value)) == 0

이것은 핵심 Java를 고수하고 부동 소수점 값 ( ==) 간의 등가 비교를 피합니다 . 가 isFinite()필요하다 rint()통과한다 무한대 값.