loading

프로그래밍/JAVA

[JAVA] java.lang.NumberFormatException 에러 해결 방법

침착곰 2021. 5. 13. 10:43
반응형

안녕하세요

자바 개발을 하다보면 문자열을 숫자로 변환하는 경우 제목과 같은 에러를 자주 볼 것 입니다

이 에러의 원인은 문자열을 변환할 때 숫자 형식이 아니라서 생기는 에러입니다

제가 에러가 났던 에러 예시와 해결 방법에 대해서 알아보겠습니다!

 


에러 원인

아래 이미지를 보면 13번 라인에서 에러가 뜬 것을 볼 수 있습니다

String을 Int로 변환하는 중 에러가 뜬 것입니다

 

에러 전문

5
9999999999999999999999999
Exception in thread "main" java.lang.NumberFormatException: For input string: "9999999999999999999999999"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.base/java.lang.Integer.parseInt(Integer.java:652)
	at java.base/java.lang.Integer.parseInt(Integer.java:770)
	at Stage.S07.S02_NumerSum.Main3.main(Main3.java:13)

 

에러의 원인은 입력한 string의 값이 int의 허용 범위를 초과해서 생긴 문제입니다

int의 허용 범위는 -2,147,483,648 ~ 2,147,483,647 여기까지 표현하는데 현재 허용범위를 초과했습니다

 


해결 방법

에러를 해결한 방법은 int가 아닌 다른 자료형으로 선언해서 해결했습니다

수정한 코드입니다

int가 아닌 double로 선언하여 에러를 해결했습니다

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main4 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		br.readLine();
				
		double b = Double.parseDouble(br.readLine());
		
		int sum = 0;
		
		while(b > 0)
		{
			sum += b % 10;
			b = Math.floor(b / 10);
		}
		
		System.out.print(sum);
	}
}

 

여기까지 java.lang.NumberFormatException 에러 해결 방법에 대해서 알아봤습니다

위의 에러가 정확한 원인이 아닐 수도 있지만 개발자분들에게 제 포스팅이 도움이 되었으면 좋겠습니다!

반응형
그리드형