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

조회수 1407회
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" 이란 숫자가 출력되는지 모르겠습니다. ㅜㅜ

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.6.21 21:38

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)