o2o-negosium-original/frontend/src/features/chat/lib/koreanNumber.ts

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
}