[javascript] 아라비아 숫자를 한글식으로 변환하기
4 min readAug 2, 2020
- 아라비아 숫자에 한글 단위 (만, 억, 조) 를 붙인 경우
- 아라비아 숫자를 한글 숫자 형식으로 변환한 경우
위 두 가지의 방식으로 변환해보려고 한다.
아라비아 숫자에 한글 단위를 붙일 경우, 10000^n의 숫자 단위로 끊어서 만, 억, 조.. 등의 단위를 추가해주면 된다. 10000보다 작은 경우에는 어떠한 단위도 붙이지 않고, 10000 보다 크고 10000²보다 작은 수에는 ‘만’을, 10000²보다 크고 10000³보다 작은 수에는 ‘억'을… 주어진 숫자가 10000^n보다 작을 동안 거듭제곱 n의 수를 더해가며 루프를 반복해 나가면 된다.
아라비아 숫자에 한글 단위를 붙인 경우
function geKoreanNumber(number) {
const koreanUnits = ['조', '억', '만', ''];
const unit = 10000;
let answer = '';
while (number > 0) {
const mod = number % unit;
const modToString = mod.toString().replace(/(\d)(\d{3})/, '$1,$2');
number = Math.floor(number / unit);
answer = `${modToString}${koreanUnits.pop()}${answer}`;
}
return answer;
}
geKoreanNumber(123456789); // 1억 2,345만 6,789
먼저 주어진 숫자를 10000^(n+1) 로 나눈 나머지를 구해 추가하고자 하는 단위보다 큰 숫자는 떼어내고, 해당 숫자를 10000^n으로 나눈 몫의 정수 부분만 추출해 해당 단위를 추가해준다.
modToString
변수는 아라비아 숫자 3자리마다 콤마(,)를 찍어주고 있다.
아라비아 숫자를 한글 숫자 형식으로 변환한 경우
위의 한글 단위를 붙여주는 함수를 응용하였다.
function geKoreanNumber(number) {
const koreanNumber = ['', '일', '이', '삼', '사', '오', '육', '칠', '팔', '구'];
const tenUnit = ['', '십', '백', '천'];
const tenThousandUnit = ['조', '억', '만', ''];
const unit = 10000;
let answer = '';
while (number > 0) {
const mod = number % unit;
const modToArray = mod.toString().split('');
const length = modToArray.length - 1;
const modToKorean = modToArray.reduce((acc, value, index) => {
const valueToNumber = +value;
if (!valueToNumber) return acc;
// 단위가 십 이상인 '일'글자는 출력하지 않는다. ex) 일십 -> 십
const numberToKorean = index < length && valueToNumber === 1 ? '' : koreanNumber[valueToNumber];
return `${acc}${numberToKorean}${tenUnit[length - index]}`;
}, '');
answer = `${modToKorean}${tenThousandUnit.pop()} ${answer}`;
number = Math.floor(number / unit);
}
return answer.replace();
}
geKoreanNumber(123456789); // 일억 이천삼백사십오만 육천칠백팔십구
geKoreanNumber(3400); // 삼천사백
어렵고만