|
15 | 15 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
16 | 16 | # MA 02110-1301 USA
|
17 | 17 |
|
18 |
| -from __future__ import print_function, unicode_literals |
| 18 | +from __future__ import division, print_function, unicode_literals |
| 19 | + |
| 20 | +import math |
19 | 21 |
|
20 | 22 | from .lang_EU import Num2Word_EU
|
21 | 23 |
|
@@ -120,47 +122,47 @@ def merge(self, curr, next):
|
120 | 122 |
|
121 | 123 | def to_ordinal(self, value):
|
122 | 124 | self.verify_ordinal(value)
|
123 |
| - try: |
124 |
| - if value == 0: |
125 |
| - text = "" |
126 |
| - elif value <= 10: |
127 |
| - text = "%s%s" % (self.ords[value], self.gender_stem) |
128 |
| - elif value <= 12: |
129 |
| - text = ( |
130 |
| - "%s%s%s" % (self.ords[10], self.gender_stem, |
131 |
| - self.to_ordinal(value - 10)) |
132 |
| - ) |
133 |
| - elif value <= 100: |
134 |
| - dec = (value // 10) * 10 |
135 |
| - text = ( |
136 |
| - "%s%s %s" % (self.ords[dec], self.gender_stem, |
137 |
| - self.to_ordinal(value - dec)) |
138 |
| - ) |
139 |
| - elif value <= 1e3: |
140 |
| - cen = (value // 100) * 100 |
141 |
| - text = ( |
142 |
| - "%s%s %s" % (self.ords[cen], self.gender_stem, |
143 |
| - self.to_ordinal(value - cen)) |
144 |
| - ) |
145 |
| - elif value < 1e18: |
146 |
| - # dec contains the following: |
147 |
| - # [ 1e3, 1e6): 1e3 |
148 |
| - # [ 1e6, 1e9): 1e6 |
149 |
| - # [ 1e9, 1e12): 1e9 |
150 |
| - # [1e12, 1e15): 1e12 |
151 |
| - # [1e15, 1e18): 1e15 |
152 |
| - dec = 10 ** ((((len(str(int(value))) - 1) / 3 - 1) + 1) * 3) |
153 |
| - part = int(float(value / dec) * dec) |
154 |
| - cardinal = ( |
155 |
| - self.to_cardinal(part / dec) if part / dec != 1 else "" |
| 125 | + if value == 0: |
| 126 | + text = "" |
| 127 | + elif value <= 10: |
| 128 | + text = "%s%s" % (self.ords[value], self.gender_stem) |
| 129 | + elif value <= 12: |
| 130 | + text = ( |
| 131 | + "%s%s%s" % (self.ords[10], self.gender_stem, |
| 132 | + self.to_ordinal(value - 10)) |
| 133 | + ) |
| 134 | + elif value <= 100: |
| 135 | + dec = (value // 10) * 10 |
| 136 | + text = ( |
| 137 | + "%s%s %s" % (self.ords[dec], self.gender_stem, |
| 138 | + self.to_ordinal(value - dec)) |
156 | 139 | )
|
157 |
| - text = ( |
158 |
| - "%s%s%s %s" % (cardinal, self.ords[dec], self.gender_stem, |
159 |
| - self.to_ordinal(value - part)) |
160 |
| - ) |
161 |
| - else: |
162 |
| - text = self.to_cardinal(value) |
163 |
| - except KeyError: |
| 140 | + elif value <= 1e3: |
| 141 | + cen = (value // 100) * 100 |
| 142 | + text = ( |
| 143 | + "%s%s %s" % (self.ords[cen], self.gender_stem, |
| 144 | + self.to_ordinal(value - cen)) |
| 145 | + ) |
| 146 | + elif value < 1e18: |
| 147 | + # Round down to the nearest 1e(3n) |
| 148 | + # dec contains the following: |
| 149 | + # [ 1e3, 1e6): 1e3 |
| 150 | + # [ 1e6, 1e9): 1e6 |
| 151 | + # [ 1e9, 1e12): 1e9 |
| 152 | + # [1e12, 1e15): 1e12 |
| 153 | + # [1e15, 1e18): 1e15 |
| 154 | + dec = 1000 ** int(math.log(int(value), 1000)) |
| 155 | + |
| 156 | + # Split the parts before and after the word for 'dec' |
| 157 | + # eg (12, 345) = divmod(12_345, 1_000) |
| 158 | + high_part, low_part = divmod(value, dec) |
| 159 | + |
| 160 | + cardinal = self.to_cardinal(high_part) if high_part != 1 else "" |
| 161 | + text = ( |
| 162 | + "%s%s%s %s" % (cardinal, self.ords[dec], self.gender_stem, |
| 163 | + self.to_ordinal(low_part)) |
| 164 | + ) |
| 165 | + else: |
164 | 166 | text = self.to_cardinal(value)
|
165 | 167 | return text.strip()
|
166 | 168 |
|
|
0 commit comments