계산기 프로그램을 만들던 중에 분모가 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 |