자바스크립트 천단위 컴마와 관련해서...

자바스크립트 천단위 컴마와 관련해서...

QA

자바스크립트 천단위 컴마와 관련해서...

본문

수량, 단가를 넣으면 수량*단가 계산식을 자동으로 금액란에 보여 주려고 합니다.
그리고 모든 항목에 천단위 마다 컴마를 표시하려 합니다.

 

아래와 같이 작성했는데, 원래 이런 방법 밖에 없나요?
컴퓨터 주특기가 계산인데 이렇게 돌아 가면서 계산한다는게 이상합니다.

 

아주 간단한 계산식인데 이렇게 복잡하게 컴마 빼서 곱하고, 나중에 다시 넣고.. 너무 복잡한거 같아요.
숫자에 컴마이든 숫자와 앞뒤 - 기호 이외에 모든 문자를 제거해 주는 내장함수라던지, 뭐 더 쉬운 방법이 분명 있을것 같은데..

 


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, ',');

 

숫자로 계산을 하고 다시 콤마를 붙이는 방법 외에는 없을겁니다.

 

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT