How to convert an integer into its written‑out English words in JavaScript

1 Answer

0 votes
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

*/

 



answered May 5 by avibootz
...