2014-05-22 5 views
1

안녕하세요.이 코드는 int를 수동으로 int로 변환합니다.수동으로 String을 int로 변환하기 위해 '0'을 뺍니다.

int num = 0; 
for(int i = 0; i < length(number); i++) { 
    num *= 10; 
    num += number.charAt(i) - '0'; 
    println("i :" + num); 
} 

왜 마지막에 '0'을 뺍니까? numberString이 숫자로 해석됩니다

+2

ASCII 코드와 관련이 있습니까? – Max

+0

왜냐하면'char'는 정말로 다른 방식으로 해석되는'short'입니다. 그래서 어떤 식 으로든, "distance from" '0'을 계산할 것입니다. " – awksp

+2

이 예제를보십시오 :'int i = 'F'- 'A';'F'와'A'의 값은 얼마입니까? 예를 들어''3 ''의 가치는 무엇입니까? (힌트 : 3이 아닙니다.) –

답변

2

메서드 .charAt(int position)은 숫자 문자열에서 단일 문자를 반환합니다. 문자열에 숫자가 포함되어 있으므로 숫자 (0 - 9)가 포함 된 문자가 전송됩니다. 다음 단계는이 문자를 int로 변환하는 것입니다.

순진 솔루션은 다음과 같습니다

char digit = number.charAt(i); 
if (digit == '0') { 
    num += 0; 
} else if (digit == '1') { 
    num += 1; 
} 

그러나 우리는이 문제를 단순화하기 위해 문자의 ASCII 값을 사용할 수 있습니다. this ASCII table ('Dec'및 'Chr'열만)을 살펴보십시오.

int num = digit - 48; 

이 훨씬 더 직접적으로 될 것입니다 문자를 배치하여 단순화 할 수있다 : 당신은 문자 0 사실 우리는 우리의 문자 48 우리가 올바른 값을 검색 빼지 그렇다면 (48)의 값을 갖는 것을 볼 수 있습니다 컴파일러에 의해 대체 :

int num = digit - '0'; 

예 : '4'52의 ASCII 값이

캐릭터. 우리가 48을 빼면 우리는 원하는 결과 인 4를 얻습니다.

2

경우 숫자로 char의를 나타낼 경우 number.charAt(i) 그것이 0 —— 9 될 것이라고, '0' —— '9'에서 문자, '0'의 코드 ('0' —— '0' + 9 같은 것을) 이동의를 얻기 위해 이렇게 정확한 숫자 (int : 숫자)이면 char에서 '0' 코드를 빼야합니다.

1

숯 '0'문자 총점 48

'0' 48 
'1' 49 
'2' 50 
... 
'9' 57 

예 :

number.charAt (ⅰ)이었다 '9', 9 '는 다음 57 문자 (57) 인 경우 - 48 = 9

0

'0'의 ASCII 값은 48이고 '1'은 49 등입니다. 예 : 문자 변수 "ch"가 '5'를 포함하면 '5'의 ASCII 값은 53입니다. 수학 연산 '5'를 수행하려면 정수 값으로 변환해야합니다. 그래서 우리는 ch-'0 '을 사용합니다 (즉,'5 '-'0 '은 53-48 즉 5를 의미합니다) 이렇게하면 정수 값'5 '를 얻습니다. 이제 우리는 수학 연산을 수행 할 수 있습니다. '5'에서 수학 연산을 수행하면 컴파일러는이를 53으로 처리합니다.