|
1 |
| -const sayNumberInEnglish = (n) => { |
2 |
| - const SINGLE_ARRAY = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] |
3 |
| - const TEEN_ARRAY = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"] |
4 |
| - const DOUBLE_ARRAY = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"] |
5 |
| - |
6 |
| - //For Single Digit |
7 |
| - if(n.toString().length === 1){ |
8 |
| - return SINGLE_ARRAY[n] |
9 |
| - } |
10 |
| - |
11 |
| - //For Double Digits |
12 |
| - if(n.toString().length === 2){ |
13 |
| - if(parseInt(n.toString().charAt(n.length - 2)) === 1){ |
14 |
| - return TEEN_ARRAY[(n%10)] |
15 |
| - } |
16 |
| - |
17 |
| - if(n % 10 === 0){ |
18 |
| - return DOUBLE_ARRAY[(n/10) - 2] |
19 |
| - } |
20 |
| - |
21 |
| - const partOne = DOUBLE_ARRAY[Math.floor((n/10)) - 2] |
22 |
| - const partTwo = SINGLE_ARRAY[n%10] |
23 |
| - |
24 |
| - return partOne + "-" + partTwo |
25 |
| - } |
| 1 | +var NUMBER2TEXT = { |
| 2 | + ones: [ |
| 3 | + "", |
| 4 | + "one", |
| 5 | + "two", |
| 6 | + "three", |
| 7 | + "four", |
| 8 | + "five", |
| 9 | + "six", |
| 10 | + "seven", |
| 11 | + "eight", |
| 12 | + "nine", |
| 13 | + "ten", |
| 14 | + "eleven", |
| 15 | + "twelve", |
| 16 | + "thirteen", |
| 17 | + "fourteen", |
| 18 | + "fifteen", |
| 19 | + "sixteen", |
| 20 | + "seventeen", |
| 21 | + "eighteen", |
| 22 | + "nineteen", |
| 23 | + ], |
| 24 | + tens: [ |
| 25 | + "", |
| 26 | + "", |
| 27 | + "twenty", |
| 28 | + "thirty", |
| 29 | + "fourty", |
| 30 | + "fifty", |
| 31 | + "sixty", |
| 32 | + "seventy", |
| 33 | + "eighty", |
| 34 | + "ninety", |
| 35 | + ], |
| 36 | + sep: [ |
| 37 | + "", |
| 38 | + " thousand ", |
| 39 | + " million ", |
| 40 | + " billion ", |
| 41 | + " trillion ", |
| 42 | + " quadrillion ", |
| 43 | + " quintillion ", |
| 44 | + " sextillion ", |
| 45 | + ], |
| 46 | +}; |
26 | 47 |
|
27 |
| - if(n%100 === 0 && parseInt(n.toString().charAt(0)) !== 0){ |
28 |
| - return SINGLE_ARRAY[(n/100)] + " hundred" |
29 |
| - } |
| 48 | +const { ones, tens, sep } = NUMBER2TEXT; |
30 | 49 |
|
31 |
| - const remainingNumber =n - parseInt(${parseInt(n.toString().charAt(0))}00) |
| 50 | +const sayNumberInEnglish = (number) => { |
| 51 | + let arr = [], |
| 52 | + str = "", |
| 53 | + i = 0; |
| 54 | + if (number.length === 0) { |
| 55 | + return; |
| 56 | + } |
32 | 57 |
|
33 |
| - if(remainingNumber.toString().length === 1){ |
34 |
| - return SINGLE_ARRAY[Math.floor((n/100))] + " hundred " + SINGLE_ARRAY[remainingNumber] |
35 |
| - } |
| 58 | + number = parseInt(number, 10); |
| 59 | + if (isNaN(number)) { |
| 60 | + return; |
| 61 | + } |
36 | 62 |
|
37 |
| - if(parseInt(remainingNumber.toString().charAt(remainingNumber.length - 2)) === 1){ |
38 |
| - return SINGLE_ARRAY[Math.floor((n/100))] + " hundred " + TEEN_ARRAY[(remainingNumber%10)] |
39 |
| - } |
| 63 | + while (number) { |
| 64 | + arr.push(number % 1000); |
| 65 | + number = parseInt(number / 1000, 10); |
| 66 | + } |
40 | 67 |
|
41 |
| - if(remainingNumber % 10 === 0){ |
42 |
| - return SINGLE_ARRAY[Math.floor((n/100))] + " hundred " + DOUBLE_ARRAY[(remainingNumber/10) - 2] |
43 |
| - } |
| 68 | + while (arr.length) { |
| 69 | + str = |
| 70 | + (function (a) { |
| 71 | + var x = Math.floor(a / 100), |
| 72 | + y = Math.floor(a / 10) % 10, |
| 73 | + z = a % 10; |
44 | 74 |
|
45 |
| - const partOne = DOUBLE_ARRAY[Math.floor((remainingNumber/10)) - 2] |
46 |
| - const partTwo = SINGLE_ARRAY[remainingNumber%10] |
| 75 | + return ( |
| 76 | + (x > 0 ? ones[x] + " hundred " : "") + |
| 77 | + (y >= 2 ? tens[y] + "-" + ones[z] : ones[10 * y + z]) |
| 78 | + ); |
| 79 | + })(arr.shift()) + |
| 80 | + sep[i++] + |
| 81 | + str; |
| 82 | + } |
47 | 83 |
|
48 |
| - return SINGLE_ARRAY[Math.floor((n/100))] + " hundred " + partOne + "-" + partTwo |
| 84 | + return str; |
49 | 85 | };
|
50 | 86 |
|
51 |
| - |
52 |
| - |
53 |
| -console.log(`5635 in english is: ${sayNumberInEnglish(5635)}`) |
| 87 | +console.log(`5635 in english is: ${sayNumberInEnglish(5635)}`); |
0 commit comments