자바스크립트 질문입니다.


function comma(obj) { 
    var num = obj.value;
    if (obj.value.length >= 4) {
        re = /^$|,/g; 
        num = num.replace(re, ""); 
        fl="" 
        if(isNaN(num)) { alert("Numbers only.");return 0} 
        if(num==0) return num 
        if(num<0){ 
            num=num*(-1) 
            fl="-" 
        }
        else{ 
            num=num*1; 
        } 
        num = new String(num) 
        temp="" 
        co=3 
        num_len=num.length 
        while (num_len>0){ 
            num_len=num_len-co 
            if(num_len<0){co=num_len+co;num_len=0} 
            temp=","+num.substr(num_len,co)+temp 
        } 
        obj.value =  fl+temp.substr(1);
    }
}

키업 이벤트 할 시에 숫자에 자동으로 컴마를 붙여주는 펑션인데요

obj가 처음에 2000 이라고 가정하였을때

temp=","+num.substr(num_len,co)+temp

이 부분에서 temp의 값이 ",000" 으로 되는데

왜 마지막

temp.substr(1);

이부분에서 console.log로 찍으면

"2,000" 이란 숫자가 출력되는지 모르겠습니다. ㅜㅜ

  • 2016년 06월 21일에 작성됨

조회수 182


1 답변


좋아요
2
싫어요
채택취소하기

예를 들어 2000 이라고 할 때, 값을 추적해보시면 다음과 같은 과정을 거칩니다.

먼저 2000 은 4자리임으로

num_len 은 4, num는 { 2, 0, 0, 0 } 이 배열로 들어있게 됩니다.

가 초기값입니다.

while의 첫번째 루프에서

  num_len=num_len-co 

임으로

num_len 은 1이 됩니다.

temp=","+num.substr(num_len,co)+temp 

즉, ","num의 1번째(인덱스의 기수는 0임으로 두번째 글자)부터, 3글자(000에 기존의 temp를 concatenation하게 됩니다. 따라서 다음과 같이 됩니다. temp 는 ",000", num_len 은 1

아직 num_len > 0 이기 때문에 한 번더 루프를 수행합니다.

이 때,

  num_len=num_len-co 

num_len 은 -2

가 되어서

  if(num_len<0){co=num_len+co;num_len=0} 

이 문장에 의해 num_len => 0, co => 1로 보정됩니다.

temp=","+num.substr(num_len,co)+temp 

그리고 위 문장에 의해 ,num의 0번째부터 1글자(2)에 기존의 temp(',000')를 concatenation하여

temp 는 ",2,000" , num_len 은 0

이 되어 while loop가 종료하게 됩니다.

위 함수는 항상 매번의 루프가 끝나게 되면 첫번째 글자는 항상 콤마(,)로 시작되는 것을 알 수 있습니다.

그래서 실제 숫자 표현시에는 첫번째 콤마(,)를 제외하기 위해서 마지막에 temp.substr(1)을 사용합니다.

  • 2016년 06월 21일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 감사합니다 사랑합니다 !!    김영광   2016.6.21 21:38     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close