자바스크립트 질문입니다.
조회수 1421회
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 답변
-
예를 들어 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)
을 사용합니다.
댓글 입력