String
을 long
으로 변환하는 Java 코드를 작성했습니다. 그러나 오버 플로우 문제를 해결할 때이를 해결하는 방법에 대한 단서가 없습니다. 넘버가 넘치면 컴퓨터는 모든 수를 합법적이라고 생각합니다. 64bit JDK와 함께 프로그램이 넘치도록하는 방법은 키 문제입니다. 그리고 parseLong이나 다른 라이브러리와 같은 내장 라이브러리를 사용할 수 없습니다. 데이터보다 큰 long.maxvalue
이다문자열을 Long으로 변환, 라이브러리에 내장하지 않음
public static long strTolong(String s){
//error checking
if(s == null) return 0;
s = s.trim();//remove all space character
boolean neg = false;//judge the number is negative or positive
int pos = 0 ; //index of string
long result = 0;
//check positive or negative
if(s.charAt(pos) == '-'){
neg = true;
pos++;
}else if(s.charAt(pos) == '+') pos++;
//calculate result
while(pos<s.length()){
if(s.charAt(pos) >='0' && s.charAt(pos) <='9'){
result = result*10+(s.charAt(pos) - '0');
}else
break;
pos++;
}
if(neg) result =-result;
//check overflow
if(result >Long.MAX_VALUE) {
return Long.MAX_VALUE;
}
if(result<Long.MIN_VALUE){
return Long.MIN_VALUE;
}
return result;
}
경우, 결과는 정확하게 컴퓨터에 저장 될 수 없다.
이 문제를 해결하는 방법은 무엇입니까?
'Long.parseLong ("102");의 문제점은 무엇입니까? –