본문 바로가기
Camp/정리

[TIL/JAVA] ArithmeticException

by 뭔가 한다 2024. 10. 15.

계산기 프로그램을 만들던 중에 분모가 0일경우를 상정하여 예외처리를 추가하는 과정에서

나눗셈 시 소수점 이하를 표시하고 싶어서 자료형을 변경 하였더니 에러가 아닌 Infinity를 출력하기 시작해서 찾아보기 시작했다.

이전 코드

try {
    System.out.print("피연산자를 입력해 주세요(숫자 2개) : ");
    operand1 = sc.nextInt();
    operand2 = sc.nextInt();

    System.out.print("연산자를 입력해 주세요.(+, -, *, /, %) : ");
    String operation = sc.next();

    // 연산자 구분 부분
} catch (NumberFormatException e) {
    // 입력받은 값이 숫자가 아닌 경우 예외 처리
    System.out.println("숫자를 입력해 주세요.");
} catch (ArithmeticException e) {
    // 나누기 연산 중 분모가 0일 경우 예외 처리
    System.out.println(e.getMessage());
}

이 경우에는 정상적으로 에러 메시지가 출력 됨.

이 이유는 https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3 여기에서 확인이 가능했다.

JAVA에서는 싱수형을 처리할 때 IEEE 754 부동소수점 표준을 따르는데 이 표준의 특수 예외 상황 중에 분모가 0인 경우에 Infinity를 반환하는 것으로 정의되어있었다.

0이상 또는 0이하의 수와 0을 나눌경우 : ±Infinity 반환
0과 0을 나눌경우 : NaN 반환

결론은 Double.isInfinite()와 Double.isNaN()으로 예외 처리를 진행.

'Camp > 정리' 카테고리의 다른 글

JPA를 활용한 join 구현과 Project Trouble Shooting  (0) 2024.11.24
[OOP] SOLID 원칙  (0) 2024.11.12
1주차 프로젝트 회고록  (0) 2024.10.07
Backend 용어 정리  (0) 2024.10.07
XML Parse JS  (0) 2024.10.04