문제 상황
임의의 숫자가 주어졌을 때, 해당 숫자를 받아 인도 통화 형식으로 변환한 결과를 반환하는 JavaScript 함수를 작성해야 한다고 가정해 보겠습니다.
인도 통화 표기법은 일반적인 서양식 방식과 다릅니다. 서양에서는 세 자리마다 콤마를 찍지만, 인도에서는 맨 앞 세 자리 이후에는 두 자리씩 끊어서 콤마를 표시합니다. 예를 들어 129943은 "1,29,943"으로 표기됩니다.
원하는 결과는 다음과 같습니다.
toCurrency(1000) --> ₹1,000.00
toCurrency(129943) --> ₹1,29,943.00
toCurrency(76768798) --> ₹7,67,68,798.00
해결 방법: toLocaleString() 메서드 활용
JavaScript의 내장 메서드인 toLocaleString()을 사용하면 별도의 변환 로직을 직접 구현할 필요 없이 간단하게 해결할 수 있습니다. 핵심은 로케일을 'en-IN'(영어-인도)으로 지정하고, 옵션 객체에 통화 관련 설정을 추가하는 것입니다.
- locale:
'en-IN'— 인도 영어 로케일을 적용하여 인도식 숫자 그룹화 규칙(두 자리씩 묶기)을 사용합니다. - style:
'currency'— 출력 형식을 통화로 지정합니다. - currency:
'INR'— 인도 루피(Indian Rupee) 통화 기호(₹)를 표시합니다.
예제 코드
const num1 = 1000;
const num2 = 129943;
const num3 = 76768798;
const toIndianCurrency = (num) => {
const curr = num.toLocaleString('en-IN', {
style: 'currency',
currency: 'INR'
});
return curr;
};
console.log(toIndianCurrency(num1));
console.log(toIndianCurrency(num2));
console.log(toIndianCurrency(num3));
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
₹1,000.00
₹1,29,943.00
₹7,67,68,798.00
참고: 인도식 숫자 표기법의 원리
인도의 숫자 표기 방식은 라크(Lakh)와 크로레(Crore)라는 고유한 단위 체계를 기반으로 합니다.
- 1 라크(Lakh) = 100,000 (10만)
- 1 크로레(Crore) = 10,000,000 (1천만)
따라서 76768798은 7크로레 67라크 68798에 해당하며, "₹7,67,68,798.00"처럼 표기됩니다. 소수점 아래 두 자리(.00)는 통화 스타일 옵션에 의해 자동으로 추가된 것입니다.
이처럼 toLocaleString() 메서드 하나만으로 국가별 통화 형식을 손쉽게 처리할 수 있으며, 미국 달러(USD), 유로(EUR) 등 다른 통화로도 동일한 방식으로 응용할 수 있습니다.