일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터베이서
- 머신러닝야학
- JavaScript
- Python
- 파이썬
- 딥러닝
- 야학
- 카카오클라우드스쿨2기
- Database
- 개발자
- Java
- 이것이 자바다
- 연산자
- reshape
- 데이터베이스 개론
- MySQL
- 데이터베이스
- 머신러닝
- LeNet
- 생활코딩 데이터베이스
- 머신러닝(딥러닝)
- tensorflow
- 판다스
- 생활코딩 머신러닝야학
- CNN
- 생활코딩
- pandas
- flatten
- Today
- Total
IT's 우
이것이 자바다[Java]_3장 Nan, Infinity 연산, ArithmeticException(예외) 본문
/ 나 % 연산자를 사용할 때 좌측 피연산자가 정수 타입인 경우 나누는 수는 0을 사용할 수 없다. 만일 0으로 나누면 컴파일은 정상적으로 되지만, 실행 시 ArithmeticException(예외)이 발생한다.
ArithmeticException(예외) --> 정수를 0으로 나눌 경우 발생!!!
Java는 프로그램 실행 도중 예외가 발생하면 실행이 즉시 멈추고 프로그램은 종료된다. ArithmeticException이 발생했을 경우 프로그램이 종료되지 않도록 하려면 예외 처리를 해야한다.
실수 타입인 0.0 또는 0.0f로 나누면 ArithmeticException이 발생하지 않고, / 연산의 결과는 Infinity(무한대) 값을 가지며, % 연산의 결과는 NaN(Not a Number)을 가진다.
5 / 0 --> ArithmeticException
5 % 0 --> ArithmeticException
5 / 0.0 --> Infinity
5 % 0.0 --> NaN
/와 % 연산의 결과가 Infinity 또는 NaN이 나오면 이 값들로 산술 연산을 하면 어떤 수와 연산하더라도 Infinity와 NaN이 산출되어 데이터가 엉망이 될 수 있다.
코드에서 /와 % 연산의 결과가 Infinity 또는 NaN인지 확인하려면
Double.isInfinite()와 Double.isNaN() 메소드를 이용하면 된다.
public class InfinityAndNaNCheckExample {
public static void main(String[] args) {
int x = 5;
double y = 0.0;
double z = x / y;
//double z = x % y;
System.out.println(Double.isInfinite(z));
System.out.println(Double.isNaN(z));
System.out.println(z+2); //문제가 되는 코드
}
}

-입력값의 NaN 검사
부동소수점(실수)을 입력받을 때에는 반드시 NaN 검사를 해야한다.
public class InputDataCheckNaNExample {
public static void main(String[] args) {
String userInput = "NaN"; //사용자로부터 입력 받은 값
//입력값을 double 타입으로 변환
double val = Double.valueOf(userInput);
//"NaN"이 문자열이 Double.valueOf() 메소드에 의해 double 타입으로 변환되어 val에는 NaN이 저장된다.
double currentBalance = 10000.0;
currentBalance += val;
System.out.println(currentBalance);
}
}
문자열로 "NaN"을 입력받아 double 타입으로 변환하여 NaN으로 저장된 값으로 산술 연산을 수행하면 연산이 엉망이 된다. 그러므로 문자열을 입력받을 때에는 반드시 "NaN"인지 조사해야 한다.
public class InputDataCheckNaNExample2 {
public static void main(String[] args) {
String userInput = "NaN";
double val = Double.valueOf(userInput);
double currentBalance = 10000.0;
if(Double.isNaN(val)) {
System.out.println("NaN이 입력되어 처리할 수 없음");
val = 0.0;
}
currentBalance += val;
System.out.println(currentBalance);
}
}

'Java > 이것이 자바다' 카테고리의 다른 글
[Macbook Air M1] Java, Eclipse 설치 (0) | 2022.04.24 |
---|---|
이것이 자바다[Java]_String 타입의 문자열 비교 (0) | 2021.01.16 |
이것이 자바다, java_3장. 연산자 (0) | 2021.01.16 |