-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinteger-to-english.js
79 lines (65 loc) · 2.32 KB
/
integer-to-english.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* eslint-disable */
/*
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 2^31 - 1 (2,147,483,647)
For example,
123 -> "One Hundred Twenty Three"
12345 -> "Twelve Thousand Three Hundred Forty Five"
1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
*/
var numberToWords = function(num) {
if (num === 0) {
return 'Zero';
}
const formatNumber = (numberReversed) => {
const result = [];
for (let i = 0; i < numberReversed.length; i += 3) {
let slice = numberReversed.slice(i, i + 3).reverse().join('');
result.push(slice);
}
return result.reverse();
}
const wordifyNumber = (number, commas) => {
let numberString = number.split('').reverse().join('');
let result = [];
let hundreds = numberString[2] || '0';
let tens = numberString[1] || '0';
let ones = numberString[0] || '0';
let teens = false;
if (hundreds !== '0') {
result.push(dict.ones[hundreds] + ' Hundred');
}
if (tens !== '0') {
if (tens === '1') {
teens = true;
result.push(dict.teens[ones]);
} else {
result.push(dict.tens[tens]);
}
}
if (ones !== '0' && !teens) {
result.push(dict.ones[ones]);
}
if (commas > 0 && result.length > 0) {
result.push(dict.commas[commas]);
}
return (result.length > 0) ? result.join(' ') : false;
}
const dict = {
commas: ['', 'Thousand', 'Million', 'Billion'],
ones: ['', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine'],
tens: ['', 'Ten', 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety'],
teens: ['Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen']
};
const result = [];
const numberReversed = num.toString().split('').reverse();
const numberArray = formatNumber(numberReversed);
numberArray.forEach((number, idx) => {
let commaPlaces = numberArray.length - idx - 1;
let numberResult = wordifyNumber(number, commaPlaces);
if (numberResult !== false) {
result.push(numberResult);
}
});
return result.join(' ');
};
console.log(numberToWords(1000000))