2012-01-30 19 views
3

javascript 함수에 매개 변수로 전달하는 중입니다. UI에서 왔기 때문에 0으로 채 웁니다. 하지만 (아마도) "이상한"행동을하는 것 같습니다.Javascript, 왜 8 진수로 처리해야합니까?

console.log(0000020948); //20948 
    console.log(0000022115); //9293 which is 22115's octal 
    console.log(parseInt(0000022115, 10)); // 9293 which is 22115's octal 
    console.log(0000033959); //33959 
    console.log(20948); //20948 
    console.log(22115); //22115 
    console.log(33959); //33959 

어떻게하면 그들이 올바르게 numebr로 파싱되는지 확인할 수 있습니까? (10 진수)

편집 :

그냥 명확하게 :

그 숫자는 서버에서 온 제로 패딩 문자열입니다. 그리고 나는 각각을위한 삭제 버튼을 만들고있다.

처럼 :

function printDelButton(value){ 
      console.log(typeof value); //output string 
    return '<a href="#" onclick="deleteme('+value+')"><img src="images/del.png"></a>' 
} 

and 

function printDelButton(value){ 
console.log(typeof value); //output numeric 
    console.log(value); //here output as octal .... :S 
} 

나는 시도 : console.log(parseInt(0000022115, 10)); // 9293 which is 22115's octal 여전히를 진수

+0

숫자를 0으로 채우는 대신 공백을 사용하십시오. –

+0

UI가 0으로 채워진 이유는 무엇입니까? – jglouie

+0

스크립트에''use strict "지시문을 사용하는 것이 좋습니다. 8 진 리터럴을 사용하면 오류가 발생하고 디버그하기가 쉬워집니다. –

답변

5

, 그것은 진수와 같은 문자열을 해석하는

parseInt(string, 10) 

를 사용하여 작동합니다.

테스트에서 parseInt 메소드에 문자열이 아닌 숫자를 전달하면 아마도 예상 결과가 반환되지 않습니다.

parseInt('0000022115', 10) 

대신 나를 위해 221,115을 반환하지

parseInt(0000022115, 10) 

보십시오.

4

로 분석하면 0을 시작하면, 8 진수로 해석합니다. 당신이 특별히 진수 변환 찾고하지 않는 한 당신은 0으로 숫자 앞에해서는 안

:

여기 기사의 경고 http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference#quickIDX2

참고하세요!

은 인도에의 0 제거에 대한 아이디어 여기를 찾고 고려 : 0의 선도 Truncate leading zeros of a string in Javascript

+0

질문을 업데이트했습니다. 그들은 제로 패딩 문자열 서버에서 왔어. – Kossel

+0

@Kossel - JavaScript의 문자열에서 0을 제거하십시오. – djlumley

1

숫자 8 진수임을 나타냅니다.

parseInt은 숫자가 포함 된 문자열을 구문 분석합니다.
parseInt(0000022115, 10)은 숫자 리터럴을 전달합니다. 리터럴은 JS 인터프리터에 의해 8 진수로 파싱되므로 원시 숫자 값은 parseInt으로 전달됩니다.

0

이 숫자의 문자열 버전을 가로 채지 않는 한 운이 없게됩니다. 당신이 당신의 진수의 캐릭터 라인 버전을 얻을 수 있다면

은 ( toString()를 호출하는 것은 도움이되지 않습니다)이 작동 있음을 의미하며, : 당신에게해야

parseInt(variable_string.replace(/^0+/, ''), 10); 
0

/^[0]*([1-9]\d)/.exec(numberFromUI)[0] 

시도 그냥 0으로 채우는 숫자입니다 (소수 자릿수를 지원해야한다면 '.'에 대해 계정을 편집해야하며 '물론', 역시 재미 있습니다 ...). 유럽인들이 숫자를 쓰는 모든 미친 다른 방식을 다뤄 라!)

당신이 문자열 개체로 매개 변수를받는 경우가 0으로 시작하는 경우에도
+0

아니요; 그냥'parseInt (str, 10)'또는'parseFloat'를 사용하십시오. 문제는 그가 문자를 가지고 있다는 것입니다. – SLaks

관련 문제