numbers-words
Version:
numbers-words is a useful package when you are working with numbers. It can converts numbers to words, format numbers and more in the upcoming versions!
52 lines (41 loc) • 1.4 kB
JavaScript
const { maxNumber } = require("../core/maxNumber.js");
const lessThanTwenty = [
'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten',
'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'
];
const tenthsLessThanHundred = [
'zero', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'
];
const largeNumbers = [
'', 'thousand', 'million', 'billion', 'trillion', 'quadrillion'
];
function toNumbers(word) {
if (typeof word !== 'string') {
throw new Error(`Expected a string, got ${typeof word}`);
}
let words = word.toLowerCase().split(/\s+/);
let total = 0;
let current = 0;
words.forEach((w) => {
if (lessThanTwenty.includes(w)) {
current += lessThanTwenty.indexOf(w);
} else if (tenthsLessThanHundred.includes(w)) {
current += tenthsLessThanHundred.indexOf(w) * 10;
} else if (largeNumbers.includes(w)) {
let multiplier = Math.pow(10, 3 * largeNumbers.indexOf(w));
current *= multiplier;
total += current;
current = 0;
} else if (w === 'hundred') {
current *= 100;
} else {
throw new Error(`Unknown word: ${w}`);
}
});
total += current;
if (total > maxNumber) {
throw new Error("Number can not be greater than" + maxNumber);
}
return total;
}
module.exports = toNumbers;