46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
const digits = ['', '일', '이', '삼', '사', '오', '육', '칠', '팔', '구']
|
|
const units = ['', '십', '백', '천']
|
|
const higherUnits = ['', '만', '억', '조', '경', '해']
|
|
|
|
// 숫자를 한글 표기로 (예: 12000 → 일만이천)
|
|
export function numberToKorean(num: number): string {
|
|
if (num === 0) return '영'
|
|
|
|
const groups: number[] = []
|
|
let numStr = num.toString()
|
|
while (numStr.length > 0) {
|
|
groups.unshift(parseInt(numStr.slice(-4)))
|
|
numStr = numStr.slice(0, -4)
|
|
}
|
|
|
|
let result = ''
|
|
const groupLen = groups.length
|
|
for (let idx = 0; idx < groupLen; idx++) {
|
|
const group = groups[idx]
|
|
if (group === 0) continue
|
|
const groupStr = processGroup(group, idx === 0)
|
|
result += groupStr + higherUnits[groupLen - idx - 1]
|
|
}
|
|
return result
|
|
}
|
|
|
|
function processGroup(num: number, isFirstGroup = false): string {
|
|
const numStr = num.toString().padStart(4, '0')
|
|
let result = ''
|
|
for (let idx = 0; idx < numStr.length; idx++) {
|
|
const digit = parseInt(numStr[idx])
|
|
const unit = units[3 - idx]
|
|
if (digit === 0) continue
|
|
if (digit === 1) {
|
|
if (unit !== '') {
|
|
result += isFirstGroup && unit === '천' ? digits[digit] + unit : unit
|
|
} else {
|
|
result += '일'
|
|
}
|
|
} else {
|
|
result += digits[digit] + unit
|
|
}
|
|
}
|
|
return result
|
|
}
|