function NumToWords(num) { var str = ''; var tens, units, hundreds, remainder, baseUnit, numBaseUnits; num = num.toString().replace(/\D+/g, ''); var dic = { 0: 'không', 1: 'một', 2: 'hai', 3: 'ba', 4: 'bốn', 5: 'năm', 6: 'sáu', 7: 'bảy', 8: 'tám', 9: 'chín', 10: 'mười', 11: 'mười một', 12: 'mười hai', 13: 'mười ba', 14: 'mười bốn', 15: 'mười lăm', 16: 'mười sáu', 17: 'mười bảy', 18: 'mười tám', 19: 'mười chín', 20: 'hai mươi', 30: 'ba mươi', 40: 'bốn mươi', 50: 'năm mươi', 60: 'sáu mươi', 70: 'bảy mươi', 80: 'tám mươi', 90: 'chín mươi', 100: 'trăm', 1000: 'nghìn', 1000000: 'triệu', 1000000000: 'tỷ', 1000000000000: 'nghìn tỷ', }; switch (true) { case num < 21: str = dic[num]; break; case num < 100: tens = (Math.floor(num / 10)) * 10; units = num % 10; str = dic[tens]; if (units) { str += ' ' + dic[units]; } break; case num < 1000: hundreds = Math.floor(num / 100); remainder = num % 100; str = dic[hundreds] + ' ' + dic[100]; if (remainder) { str += ' '; if (remainder < 10) { str += 'linh '; } str += NumToWords(remainder); } break; default: baseUnit = Math.pow(1000, Math.floor(Math.log(num) / Math.log(1000))); numBaseUnits = Math.floor(num / baseUnit); remainder = num % baseUnit; str = NumToWords(numBaseUnits) + ' ' + dic[baseUnit]; if (remainder) { str += ' '; if (remainder < 100) { str += 'không trăm linh '; } str += NumToWords(remainder); } break; } str = str.replace('mươi một','mươi mốt').replace('mươi năm','mươi lăm'); return str; }