Libraryless. Click here for Pure Java version (163L/1K).
1 | // from https://www.rgagnon.com/javadetails/java-0426.html |
2 | |
3 | import java.text.DecimalFormat; |
4 | |
5 | sS numberToEnglish(long number) { |
6 | ret numberToEnglish_EnglishNumberToWords.convert(number); |
7 | } |
8 | |
9 | sclass numberToEnglish_EnglishNumberToWords { |
10 | private static final String[] tensNames = { |
11 | "", |
12 | " ten", |
13 | " twenty", |
14 | " thirty", |
15 | " forty", |
16 | " fifty", |
17 | " sixty", |
18 | " seventy", |
19 | " eighty", |
20 | " ninety" |
21 | }; |
22 | |
23 | private static final String[] numNames = { |
24 | "", |
25 | " one", |
26 | " two", |
27 | " three", |
28 | " four", |
29 | " five", |
30 | " six", |
31 | " seven", |
32 | " eight", |
33 | " nine", |
34 | " ten", |
35 | " eleven", |
36 | " twelve", |
37 | " thirteen", |
38 | " fourteen", |
39 | " fifteen", |
40 | " sixteen", |
41 | " seventeen", |
42 | " eighteen", |
43 | " nineteen" |
44 | }; |
45 | |
46 | private static String convertLessThanOneThousand(int number) { |
47 | String soFar; |
48 | |
49 | if (number % 100 < 20){ |
50 | soFar = numNames[number % 100]; |
51 | number /= 100; |
52 | } |
53 | else { |
54 | soFar = numNames[number % 10]; |
55 | number /= 10; |
56 | |
57 | soFar = tensNames[number % 10] + soFar; |
58 | number /= 10; |
59 | } |
60 | if (number == 0) return soFar; |
61 | return numNames[number] + " hundred" + soFar; |
62 | } |
63 | |
64 | |
65 | public static String convert(long number) { |
66 | // 0 to 999 999 999 999 |
67 | if (number == 0) { return "zero"; } |
68 | |
69 | String snumber = Long.toString(number); |
70 | |
71 | // pad with "0" |
72 | String mask = "000000000000"; |
73 | DecimalFormat df = new DecimalFormat(mask); |
74 | snumber = df.format(number); |
75 | |
76 | // XXXnnnnnnnnn |
77 | int billions = Integer.parseInt(snumber.substring(0,3)); |
78 | // nnnXXXnnnnnn |
79 | int millions = Integer.parseInt(snumber.substring(3,6)); |
80 | // nnnnnnXXXnnn |
81 | int hundredThousands = Integer.parseInt(snumber.substring(6,9)); |
82 | // nnnnnnnnnXXX |
83 | int thousands = Integer.parseInt(snumber.substring(9,12)); |
84 | |
85 | String tradBillions; |
86 | switch (billions) { |
87 | case 0: |
88 | tradBillions = ""; |
89 | break; |
90 | case 1 : |
91 | tradBillions = convertLessThanOneThousand(billions) |
92 | + " billion "; |
93 | break; |
94 | default : |
95 | tradBillions = convertLessThanOneThousand(billions) |
96 | + " billion "; |
97 | } |
98 | String result = tradBillions; |
99 | |
100 | String tradMillions; |
101 | switch (millions) { |
102 | case 0: |
103 | tradMillions = ""; |
104 | break; |
105 | case 1 : |
106 | tradMillions = convertLessThanOneThousand(millions) |
107 | + " million "; |
108 | break; |
109 | default : |
110 | tradMillions = convertLessThanOneThousand(millions) |
111 | + " million "; |
112 | } |
113 | result = result + tradMillions; |
114 | |
115 | String tradHundredThousands; |
116 | switch (hundredThousands) { |
117 | case 0: |
118 | tradHundredThousands = ""; |
119 | break; |
120 | case 1 : |
121 | tradHundredThousands = "one thousand "; |
122 | break; |
123 | default : |
124 | tradHundredThousands = convertLessThanOneThousand(hundredThousands) |
125 | + " thousand "; |
126 | } |
127 | result = result + tradHundredThousands; |
128 | |
129 | String tradThousand; |
130 | tradThousand = convertLessThanOneThousand(thousands); |
131 | result = result + tradThousand; |
132 | |
133 | // remove extra spaces! |
134 | return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " "); |
135 | } |
136 | } |
download show line numbers debug dex old transpilations
Travelled to 7 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1026877 |
Snippet name: | numberToEnglish |
Eternal ID of this version: | #1026877/1 |
Text MD5: | d3a5009eb677a70687f0ac1adcff1ba2 |
Transpilation MD5: | 53d2e1605c8b5304994276245e97bf67 |
Author: | stefan |
Category: | javax / a.i. |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-01-30 13:17:33 |
Source code size: | 3212 bytes / 136 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 325 / 398 |
Referenced in: | [show references] |