Programing

더블이 NaN과 동일한지 확인하기 위해 어떻게 테스트하는가?

c10106 2022. 4. 16. 08:56
반응형

더블이 NaN과 동일한지 확인하기 위해 어떻게 테스트하는가?

자바에 더블이 있는데 맞는지 확인하고 싶어.NaN이것을 하기 위한 가장 좋은 방법은 무엇인가?

정적 메서드를 사용하거나Double의 방법

// 1. static method
if (Double.isNaN(doubleValue)) {
    ...
}
// 2. object's method
if (doubleObject.isNaN()) {
    ...
}

단순 작업:

if (var == Double.NaN) {
    ...
}

NaN부동 소수점 번호에 대한 IEEE 표준이 정의되는 방법 때문에 충분하지 않다.

시도:

이 이중 값이 NaN(Not-a-Number)이면 true를 반환하고 그렇지 않으면 false를 반환한다.

[에 유의하십시오.double.isNaN()]은 복싱되지 않은 복싱은 그것과 관련된 방법을 가지고 있지 않기 때문에 작동하지 않을 것이다.

다음 명령을 통해 값이 유한한지 여부를 확인하는 것도 고려해 보십시오.Double.isFinite(value)Java 8 이후 새로운 방법이 있다.Double값이 NaN과 무한대가 아닌지 한 번에 확인할 수 있는 클래스.

/**
 * Returns {@code true} if the argument is a finite floating-point
 * value; returns {@code false} otherwise (for NaN and infinity
 * arguments).
 *
 * @param d the {@code double} value to be tested
 * @return {@code true} if the argument is a finite
 * floating-point value, {@code false} otherwise.
 * @since 1.8
 */
public static boolean isFinite(double d)

다음을 사용하여 NaN을 확인할 수 있다.var != var.NaN같지 않다NaN.

편집: 이것은 아마도 단연코 최악의 방법일 것이다.그것은 혼란스럽고, 읽기에는 끔찍하며, 전체적으로 나쁜 관행이다.

테스트 대상 값이 원시 값이 아닌 이중 값일 경우null(분명히 숫자도 아니다) 그러면 다음 용어를 사용해야 한다.

(value==null || Double.isNaN(value))

이후isNaN()원시인(원시적인 더블을 더블로 권투하는 것 보다)을 원하며, a를 통과한다.null값(이중으로 상자를 해제할 수 없음)은 예상된 값 대신 예외를 초래함false.

아래 코드 조각은 NaN을 보유하는 원시 유형을 평가하는 데 도움이 될 것이다.

double dbl = Double.NaN; Double.valueOf(dbl).isNaN() ? true : false;

초보자는 실제적인 예가 필요하다.다음 코드를 사용해 보십시오.

public class Not_a_Number {

public static void main(String[] args) {
    String message = "0.0/0.0 is NaN.\nsimilarly Math.sqrt(-1) is NaN.";        
    String dottedLine = "------------------------------------------------";     

    Double numerator = -2.0;
    Double denominator = -2.0;      
    while (denominator <= 1) {
        Double x = numerator/denominator;           
        Double y = new Double (x);
        boolean z = y.isNaN();
        System.out.println("y =  " + y);
        System.out.println("z =  " + z);
        if (z == true){
            System.out.println(message);                
        }
        else {
            System.out.println("Hi, everyone"); 
        }
        numerator = numerator + 1;
        denominator = denominator +1;
        System.out.println(dottedLine);         
    } // end of while

} // end of main

} // end of class

참조URL: https://stackoverflow.com/questions/1456566/how-do-you-test-to-see-if-a-double-is-equal-to-nan

반응형