본문 바로가기

자바 언어 기초 - 연산자

나눗셈 연산 후 NaN과 Infinity 처리

나눗셈 연산에서 예외 방지하기

  • 나눗셈(/) 또는 나머지(%) 연산에서 좌측 피연산자가 정수이고 우측 피연산자가 0일 경우 ArithmeticException 발생
  • 좌측 피연산자가 실수이거나 우측 피연산자가 0.0 또는 0.0f이면 예외가 발생하지 않고 연산의 결과는 Infinity(무한대) 또는 NaN(Not a Number)이 됨


    출처, 이것이 자바다


  • Infinity 또는 NaN 상태에서 계속해서 연산을 수행하면 안 됨
  • Double.isInfinite()와 Double.isNaN()를 사용해 /와 % 연산의 결과가 Infinity 또는 NaN인지 먼저 확인하고 다음 연산을 수행하는 것이 좋음
package ch03.sec05;

public class InfinityAndNaNCheckExample {

    public static void main(String[] args) {

        //0으로 나누면 예외(Exception)발생  : 런타임 에러
        //System.out.println(5/0);

        // / 나눗셈
        //System.out.println(5/0.0); //Infinity 무한대.

        // % 나머지
        //System.out.println(5 % 0.0); //NaN(Not a Number)

        int x = 5;
        double y = 0.0;
        double z = x / y; //Infinity

        System.out.println("현재 z변수의 상태: " + Double.isFinite(z)); //false

        System.out.println(z + 2); //Infinity + 2 = Infinity

        //Double.isFinite(z) : z변수의 값이 Infinity인지 확인
        //Double.isNaN(z) : z변수의 값이 NaN인지 확인
        if(Double.isFinite(z) || Double.isNaN(z)) {
            System.out.println("값 산출 불가");

        }else {
            System.out.println(z + 2);
        }

    }

}

'자바 언어 기초 - 연산자' 카테고리의 다른 글

논리 연산자  (0) 2023.01.14
비교 연산자  (0) 2023.01.14
정확한 계산은 정수 연산으로  (0) 2023.01.14
오버플로우와 언더플로우  (0) 2023.01.14
산술 연산자  (0) 2023.01.14