[Java] NaN 뜻, 발생 원인, 체크, 대처법

    Java에서 뭔가를 계산할 경우 NaN이 발생할 수 있습니다. 특히 공식이 복잡해지고 데이터의 예측이 힘들 경우 발생할 가능성이 높아지는데요. NaN은 왜 발생하고 어떻게 대처를 해야 하는지 알아보도록 하겠습니다.

     

    [Java] NaN 뜻, 발생 원인, 체크, 대처법 메인 이미지
    [Java] NaN 뜻, 발생 원인, 체크, 대처법


    NaN의 뜻

    우선 NaN이 무슨 뜻인지를 알아야 되겠죠. NaN은 영어로 Not a Number를 뜻합니다. 한마디로 숫자가 아니라서 숫자로 표현을 할 수 없는 상태를 말합니다.

     

    NaN 발생원인

    NaN이 발생하는 경우는 값이 아닌 것을 계산할 때 발생하는데요. 0의 값을 0으로 나눴을 때 자주 발생되곤 합니다.

     

    NaN 발생 케이스

    System.out.println(0.0f / 0.0f);
    System.out.println(Math.sqrt(-1.0f));
    System.out.println(Math.log(-1.0f));
    
    // NaN
    // NaN
    // NaN

     

     

    NaN 체크(Check) 방법

    그럼 NaN을 어떻게 체크하면 될까요? 소수점을 처리하는 변수들은 NaN을 체크하는 방법이 존재합니다. 

     

    double a = 0.0f / 0.0f;
    System.out.println(a + "->" + Double.isNaN(a));
    
    // NaN->true

     

    double의 경우 Double 객체로 값을 check할 수 있고, float의 경우 Float으로 값을 체크할 수 있습니다. 각각 isNaN이라는 메소드를 제공하고 있기 때문에, 문제없이 체크를 할 수 있는 것이죠.

     

    NaN 대처법

    NaN 체크를 했으니, NaN에 대해서 대처를 해야 겠습니다. 예를 들어 NaN이 발생하는 경우, 0의 값으로 변경을 하는 것이겠죠. 대부분 NaN이 발생하는 이유가 0의 값을 처리하는 경우 발생을 하기 때문이죠.

    double a = (Double.isNaN(0.0f / 0.0f)) ? 0.0 : 0.0f / 0.0f;
    System.out.println(a);

     

    위와 같이 값을 세팅할 때, 삼항 연산자를 써서 값을 세팅을 하든, NaN을 체크해서 0의 값을 세팅을 하는 방식으로 NaN 값에 대해서 대처를 할 수 있습니다. 

    반응형

    댓글

    Designed by JB FACTORY