const below20 = [
"", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"
];
const tens = [
"", "", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety"
];
function setBelow20AndTens(num) {
if (num === 0) {
return "";
} else if (num < 20) {
return below20[num] + " ";
} else if (num < 100) {
return tens[Math.floor(num / 10)] + " " + setBelow20AndTens(num % 10);
} else {
return below20[Math.floor(num / 100)] + " hundred " + setBelow20AndTens(num % 100);
}
}
function numberToWords(num) {
if (num === 0) return "zero";
let result = "";
if (num >= 1_000_000_000) {
result += setBelow20AndTens(Math.floor(num / 1_000_000_000)) + "billion ";
num %= 1_000_000_000;
}
if (num >= 1_000_000) {
result += setBelow20AndTens(Math.floor(num / 1_000_000)) + "million ";
num %= 1_000_000;
}
if (num >= 1000) {
result += setBelow20AndTens(Math.floor(num / 1000)) + "thousand ";
num %= 1000;
}
if (num > 0) {
result += setBelow20AndTens(num);
}
return result.trim();
}
const n = 176283;
console.log(numberToWords(n));
/*
run:
one hundred seventy six thousand two hundred eighty three
*/