일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Oracle
- programmers
- 뷰
- 자바
- JPA
- Di
- Spring
- dabase
- java
- Vue
- k8s
- CKA
- map
- ORM
- SpringMVC
- CI/CD
- vuejs
- Kubernetes
- IntelliJ
- cd
- hibernate
- 코딩테스트연습
- superBuilder
- docker
- DevOps
- builder-pattern
- CI
- 해시맵
- 알고리즘
- 프로그래머스
Archives
- Today
- Total
문홍의 공부장
[Java] Division by Zero in Java: Exception, Infinity, or Not a Number 본문
개발/Java
[Java] Division by Zero in Java: Exception, Infinity, or Not a Number
moonong 2022. 1. 7. 15:05반응형
Division by Zero in Java: Exception, Infinity, or Not a Number
- 제수의 자료형이 Integer 일 때, divide by zero - ArithmeticException 을 발생시킨다.
// throws ArithmeticException
assertThrows(ArithmeticException.class, () -> {
int result = 12 / 0;
});
- 제수의 자료형이 float/dobule 일 때, exception 을 발생시키지 않으며 infinity/NaN 으로 리턴한다.
// exceptions 을 던지지 않으며, return NaN, POSITIVE_INFINITY, and NEGATIVE_INFINITY.
assertDoesNotThrow(() -> {
float result = 12f / 0;
});
assertEquals(Double.NaN, 0d / 0);
assertEquals(Float.POSITIVE_INFINITY, 12f / 0);
assertEquals(Double.NEGATIVE_INFINITY, -12d / 0);
계산식 초기에 infinity/NaN 값이 나왔다면, 어떠한 산술 연산을 수행해도 그 값이 변하지 않는다.
때문에 이를 방지하기 위해
- 0.0d, 0.0f 의 값을 정수 0 으로 치환하거나,
- infinity/NaN 을 체크하는 방어코드를 짜는 것이 좋다.
if(Double.isInifinite(number) || Double.isNaN(number)) {
// 후처리
}
반응형
'개발 > Java' 카테고리의 다른 글
[Java JPA] JPA 영속성 컨텍스트 개념 정리 (0) | 2022.04.22 |
---|---|
[Java JPA] JPA 개념 정리 (0) | 2022.04.22 |
[Java] ObjectMapper를 사용하여 Object 를 Map 으로 변경하기 (0) | 2022.01.07 |
[Java] Java Stream 활용하기 (0) | 2022.01.05 |
[Java] 추상클래스와 인터페이스의 공통점과 차이점 (0) | 2020.02.08 |