자바스크립트 천단위 컴마와 관련해서...
본문
수량, 단가를 넣으면 수량*단가 계산식을 자동으로 금액란에 보여 주려고 합니다.
그리고 모든 항목에 천단위 마다 컴마를 표시하려 합니다.
아래와 같이 작성했는데, 원래 이런 방법 밖에 없나요?
컴퓨터 주특기가 계산인데 이렇게 돌아 가면서 계산한다는게 이상합니다.
아주 간단한 계산식인데 이렇게 복잡하게 컴마 빼서 곱하고, 나중에 다시 넣고.. 너무 복잡한거 같아요.
숫자에 컴마이든 숫자와 앞뒤 - 기호 이외에 모든 문자를 제거해 주는 내장함수라던지, 뭐 더 쉬운 방법이 분명 있을것 같은데..
function calc_sum() {
var qty = document.getElementById('qty') ; // 수량
var uprice = document.getElementById('uprice') ; // 단가
var price = document.getElementById('price') ; // 금액
var qtyNum = Number(qty.value.replace(/\,/g, '')); //-- 컴마있으면 제거한 숫자
var upriceNum = Number(uprice.value.replace(/\,/g, ''));
var priceNum = Number(price.value.replace(/\,/g, ''));
if (qtyNum != 0 && upriceNum != 0) { //-- 수량,단가가 둘 다 0 이 아니면..
priceNum = qtyNum * upriceNum; //-- 금액 계산
}
qty.value = new Intl.NumberFormat().format(qtyNum); //-- 다시 천단위 컴마 붙이기
if (qty.value =='0') {qty.value = ''} //-- 0 이면 공백으로 치환
uprice.value = new Intl.NumberFormat().format(upriceNum);
if (uprice.value =='0') {uprice.value = ''}
price.value = new Intl.NumberFormat().format(priceNum);
if (price.value =='0') {price.value = ''}
}
!-->
답변 3
안녕하세요? ^^
toLocaleString() 함수를 사용하면 천단위 컴마를 쉽게 찍을 수 있습니다 ^^
참고로 위 함수의 기본값이 영미권을 기준으로 하고 있어서 별도의 옵션이 필요없어요~
var number = 100000000;
console.log(number.toLocaleString());
실행결과 : 100,000,000
그 반대의 경우에는 일단 컴마가 붙으면 문자열이 되기 때문에
문자열을 정수로 바꾸는 방법밖에 없을 것 같네요 ^^;
참고로 parseInt() 함수를 활용하시면
상대적으로 number() 함수보다 다양한 경우를 쉽게 처리할 수 있습니다.
function commaString2Int(stringNumber){
return parseInt(stringNumber.replace(/,/g , ''));
}
console.log(commaString2Int('50,000원'))
실행결과 : 50000
참고로 Python에서도 format() 함수를 사용하는 것 이외에는 유사한 알고리즘입니다.
그럼 문제를 잘 해결하시고 좋은 주말 되세요~! ^^
!-->!-->숫자외에 삭제
val = val.replace(/[^0-9]/g,'');
콤마를 추가
val = val.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ',');
숫자로 계산을 하고 다시 콤마를 붙이는 방법 외에는 없을겁니다.
콤마를 제거하고 다시 하는 방법 밖에는 없으실겁니다.