word-number-converter
Version:
A simple JavaScript library to convert numbers to words and words to numbers. Works in both Node.js and browser environments.
71 lines (63 loc) • 1.56 kB
JavaScript
const NUMS_TO_WORDS = {
0: "zero",
1: "one",
2: "two",
3: "three",
4: "four",
5: "five",
6: "six",
7: "seven",
8: "eight",
9: "nine",
10: "ten",
11: "eleven",
12: "twelve",
13: "thirteen",
14: "fourteen",
15: "fifteen",
16: "sixteen",
17: "seventeen",
18: "eighteen",
19: "nineteen",
20: "twenty",
30: "thirty",
40: "forty",
50: "fifty",
60: "sixty",
70: "seventy",
80: "eighty",
90: "ninety",
};
function numberToWordsBelowThousand(n) {
let words = [];
if (n >= 100) {
words.push(NUMS_TO_WORDS[Math.floor(n / 100)] + " hundred");
n %= 100;
}
if (n > 0) {
if (n < 20) {
words.push(NUMS_TO_WORDS[n]);
} else {
const tens = Math.floor(n / 10) * 10;
const units = n % 10;
words.push(
NUMS_TO_WORDS[tens] + (units ? "-" + NUMS_TO_WORDS[units] : "")
);
}
}
return words.join(" ");
}
export function toWords(n) {
if (n === 0) return "zero";
let parts = [];
const THOUSANDS = ["", "thousand", "million"];
for (let i = 0; n > 0; i++) {
const chunk = n % 1000;
if (chunk > 0) {
const chunkWords = numberToWordsBelowThousand(chunk);
parts.unshift(chunkWords + (THOUSANDS[i] ? " " + THOUSANDS[i] : ""));
}
n = Math.floor(n / 1000);
}
return parts.join(" ").trim();
}