mirror of https://github.com/zombieFox/voltTab.git
88 lines
2.6 KiB
JavaScript
88 lines
2.6 KiB
JavaScript
export const wordNumber = (number) => {
|
||
|
||
const ten = 10;
|
||
|
||
const oneHundred = 100;
|
||
|
||
const oneThousand = 1000;
|
||
|
||
const oneMillion = 1000000;
|
||
|
||
const oneBillion = 1000000000; // 1,000,000,000 (9)
|
||
|
||
const oneTrillion = 1000000000000; // 1,000,000,000,000 (12)
|
||
|
||
const oneQuadrillion = 1000000000000000; // 1,000,000,000,000,000 (15)
|
||
|
||
const max = 9007199254740992; // 9,007,199,254,740,992 (15)
|
||
|
||
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 generateWords = function(number) {
|
||
|
||
let remainder;
|
||
|
||
let word;
|
||
|
||
let words = arguments[1];
|
||
|
||
// We’re done
|
||
if (number === 0) {
|
||
return !words ? 'Zero' : words.join(' ').replace(/,$/, '');
|
||
}
|
||
|
||
// First run
|
||
if (!words) {
|
||
words = [];
|
||
}
|
||
|
||
// If negative, prepend “minus”
|
||
if (number < 0) {
|
||
words.push('minus');
|
||
number = Math.abs(number);
|
||
}
|
||
|
||
if (number < 20) {
|
||
remainder = 0;
|
||
word = lessThanTwenty[number];
|
||
} else if (number < oneHundred) {
|
||
remainder = number % ten;
|
||
word = tenthsLessThanHundred[Math.floor(number / ten)];
|
||
// In case of remainder, we need to handle it here to be able to add the “-”
|
||
if (remainder) {
|
||
word += '-' + lessThanTwenty[remainder];
|
||
remainder = 0;
|
||
}
|
||
} else if (number < oneThousand) {
|
||
remainder = number % oneHundred;
|
||
word = generateWords(Math.floor(number / oneHundred)) + ' Hundred';
|
||
} else if (number < oneMillion) {
|
||
remainder = number % oneThousand;
|
||
word = generateWords(Math.floor(number / oneThousand)) + ' Thousand,';
|
||
} else if (number < oneBillion) {
|
||
remainder = number % oneMillion;
|
||
word = generateWords(Math.floor(number / oneMillion)) + ' Million,';
|
||
} else if (number < oneTrillion) {
|
||
remainder = number % oneBillion;
|
||
word = generateWords(Math.floor(number / oneBillion)) + ' Billion,';
|
||
} else if (number < oneQuadrillion) {
|
||
remainder = number % oneTrillion;
|
||
word = generateWords(Math.floor(number / oneTrillion)) + ' Trillion,';
|
||
} else if (number <= max) {
|
||
remainder = number % oneQuadrillion;
|
||
word = generateWords(Math.floor(number / oneQuadrillion)) + ' Quadrillion,';
|
||
}
|
||
|
||
words.push(word);
|
||
|
||
return generateWords(remainder, words);
|
||
};
|
||
|
||
var num = parseInt(number, 10);
|
||
|
||
return generateWords(num);
|
||
};
|