Merge pull request #477 from emregeldegul/#454

#454: [tr] fix negative number problem
This commit is contained in:
Marlon Rodriguez Garcia
2022-08-19 17:03:15 -04:00
committed by GitHub
2 changed files with 33 additions and 22 deletions

View File

@@ -124,11 +124,17 @@ class Num2Word_TR(Num2Word_Base):
if not int(value) == value: if not int(value) == value:
return self.to_cardinal_float(value) return self.to_cardinal_float(value)
if str(value).startswith("-"):
pre_word, value = self.negword, float(str(value)[1:])
else:
pre_word, value = "", float(value)
self.to_splitnum(value) self.to_splitnum(value)
if self.order_of_last_zero_digit >= len(self.integers_to_read[0]): if self.order_of_last_zero_digit >= len(self.integers_to_read[0]):
# number like 00 and all 0s and even more, raise error # number like 00 and all 0s and even more, raise error
return wrd return "%s%s" % (pre_word, wrd)
if self.total_triplets_to_read == 1: if self.total_triplets_to_read == 1:
if self.total_digits_outside_triplets == 2: if self.total_digits_outside_triplets == 2:
@@ -137,7 +143,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_TENS.get( wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], "" self.integers_to_read[0][0], ""
) )
return wrd return "%s%s" % (pre_word, wrd)
if self.order_of_last_zero_digit == 0: if self.order_of_last_zero_digit == 0:
# number like xy, read cardinal xy and return # number like xy, read cardinal xy and return
wrd += self.CARDINAL_TENS.get( wrd += self.CARDINAL_TENS.get(
@@ -146,7 +152,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_ONES.get( wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][1], "" self.integers_to_read[0][1], ""
) )
return wrd return "%s%s" % (pre_word, wrd)
if self.total_digits_outside_triplets == 1: if self.total_digits_outside_triplets == 1:
if self.order_of_last_zero_digit == 0: if self.order_of_last_zero_digit == 0:
@@ -156,7 +162,7 @@ class Num2Word_TR(Num2Word_Base):
) )
if self.integers_to_read[0][0] == "0": if self.integers_to_read[0][0] == "0":
return self.ZERO return self.ZERO
return wrd return "%s%s" % (pre_word, wrd)
if self.total_digits_outside_triplets == 0: if self.total_digits_outside_triplets == 0:
if self.order_of_last_zero_digit == 2: if self.order_of_last_zero_digit == 2:
@@ -165,7 +171,7 @@ class Num2Word_TR(Num2Word_Base):
self.integers_to_read[0][0], "" self.integers_to_read[0][0], ""
) )
wrd += self.CARDINAL_HUNDRED[0] wrd += self.CARDINAL_HUNDRED[0]
return wrd return "%s%s" % (pre_word, wrd)
if self.order_of_last_zero_digit == 1: if self.order_of_last_zero_digit == 1:
# number like xy0, read cardinal xy0 and return # number like xy0, read cardinal xy0 and return
wrd += self.HUNDREDS.get( wrd += self.HUNDREDS.get(
@@ -175,7 +181,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_TENS.get( wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], "" self.integers_to_read[0][1], ""
) )
return wrd return "%s%s" % (pre_word, wrd)
if self.order_of_last_zero_digit == 0: if self.order_of_last_zero_digit == 0:
# number like xyz, read cardinal xyz and return # number like xyz, read cardinal xyz and return
wrd += self.HUNDREDS.get( wrd += self.HUNDREDS.get(
@@ -188,7 +194,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_ONES.get( wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][2], "" self.integers_to_read[0][2], ""
) )
return wrd return "%s%s" % (pre_word, wrd)
if self.total_triplets_to_read >= 2: if self.total_triplets_to_read >= 2:
if self.total_digits_outside_triplets == 2: if self.total_digits_outside_triplets == 2:
@@ -202,7 +208,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_TRIPLETS[ wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1 self.total_triplets_to_read - 1
] ]
return wrd return "%s%s" % (pre_word, wrd)
if self.order_of_last_zero_digit == len( if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 2: self.integers_to_read[0]) - 2:
# number like xy and all 0s, read cardinal xy 0..0 # number like xy and all 0s, read cardinal xy 0..0
@@ -216,7 +222,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_TRIPLETS[ wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1 self.total_triplets_to_read - 1
] ]
return wrd return "%s%s" % (pre_word, wrd)
if self.order_of_last_zero_digit < len( if self.order_of_last_zero_digit < len(
self.integers_to_read[0]) - 2: self.integers_to_read[0]) - 2:
# number like xy and others, read cardinal xy n..n # number like xy and others, read cardinal xy n..n
@@ -244,7 +250,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_TRIPLETS[ wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1 self.total_triplets_to_read - 1
] ]
return wrd return "%s%s" % (pre_word, wrd)
if self.order_of_last_zero_digit < len( if self.order_of_last_zero_digit < len(
self.integers_to_read[0]) - 1: self.integers_to_read[0]) - 1:
# number like x and others, read cardinal x n..n # number like x and others, read cardinal x n..n
@@ -268,7 +274,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_TRIPLETS[ wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1 self.total_triplets_to_read - 1
] ]
return wrd return "%s%s" % (pre_word, wrd)
if self.order_of_last_zero_digit == len( if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 2: self.integers_to_read[0]) - 2:
# number like xy0 and all 0s, read cardinal xy0 0..0 # number like xy0 and all 0s, read cardinal xy0 0..0
@@ -283,7 +289,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_TRIPLETS[ wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1 self.total_triplets_to_read - 1
] ]
return wrd return "%s%s" % (pre_word, wrd)
if self.order_of_last_zero_digit == len( if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 3: self.integers_to_read[0]) - 3:
# number like xyz and all 0s, read cardinal xyz 0..0 # number like xyz and all 0s, read cardinal xyz 0..0
@@ -299,7 +305,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_TRIPLETS[ wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1 self.total_triplets_to_read - 1
] ]
return wrd return "%s%s" % (pre_word, wrd)
if self.order_of_last_zero_digit < len( if self.order_of_last_zero_digit < len(
self.integers_to_read[0]) - 3: self.integers_to_read[0]) - 3:
# number like xyz and all others, read cardinal xyz n..n # number like xyz and all others, read cardinal xyz n..n
@@ -339,11 +345,11 @@ class Num2Word_TR(Num2Word_Base):
last_read_digit_order) - 1: last_read_digit_order) - 1:
if i == 1: if i == 1:
wrd += self.CARDINAL_HUNDRED[0] wrd += self.CARDINAL_HUNDRED[0]
return wrd return "%s%s" % (pre_word, wrd)
elif i > 1: elif i > 1:
wrd += self.CARDINAL_HUNDRED[0] wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TRIPLETS[i - 1] wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd return "%s%s" % (pre_word, wrd)
else: else:
wrd += self.CARDINAL_HUNDRED[0] wrd += self.CARDINAL_HUNDRED[0]
@@ -357,14 +363,14 @@ class Num2Word_TR(Num2Word_Base):
self.integers_to_read[0][ self.integers_to_read[0][
last_read_digit_order + 1], "" last_read_digit_order + 1], ""
) )
return wrd return "%s%s" % (pre_word, wrd)
elif i > 1: elif i > 1:
wrd += self.CARDINAL_TENS.get( wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][ self.integers_to_read[0][
last_read_digit_order + 1], "" last_read_digit_order + 1], ""
) )
wrd += self.CARDINAL_TRIPLETS[i - 1] wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd return "%s%s" % (pre_word, wrd)
else: else:
wrd += self.CARDINAL_TENS.get( wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][ self.integers_to_read[0][
@@ -381,7 +387,7 @@ class Num2Word_TR(Num2Word_Base):
self.integers_to_read[0][ self.integers_to_read[0][
last_read_digit_order + 2], "" last_read_digit_order + 2], ""
) )
return wrd return "%s%s" % (pre_word, wrd)
if i == 2: if i == 2:
if not self.integers_to_read[0][ if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order:
@@ -398,14 +404,14 @@ class Num2Word_TR(Num2Word_Base):
last_read_digit_order + 2], "" last_read_digit_order + 2], ""
) )
wrd += self.CARDINAL_TRIPLETS[i - 1] wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd return "%s%s" % (pre_word, wrd)
if i > 2: if i > 2:
wrd += self.CARDINAL_ONES.get( wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][ self.integers_to_read[0][
last_read_digit_order + 2], "" last_read_digit_order + 2], ""
) )
wrd += self.CARDINAL_TRIPLETS[i - 1] wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd return "%s%s" % (pre_word, wrd)
else: else:
if not self.integers_to_read[0][ if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order:
@@ -435,7 +441,7 @@ class Num2Word_TR(Num2Word_Base):
wrd += self.CARDINAL_TRIPLETS[i - 1] wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd return "%s%s" % (pre_word, wrd)
def to_cardinal_float(self, value): def to_cardinal_float(self, value):
self.to_splitnum(value) self.to_splitnum(value)

View File

@@ -186,7 +186,12 @@ class Num2WordsTRTest(TestCase):
{"test": 10, "to": "ordinal_num", "expected": u"10uncu"}, {"test": 10, "to": "ordinal_num", "expected": u"10uncu"},
{"test": 1, "to": "ordinal_num", "expected": u"1inci"}, {"test": 1, "to": "ordinal_num", "expected": u"1inci"},
{"test": 3, "to": "ordinal_num", "expected": u"3üncü"}, {"test": 3, "to": "ordinal_num", "expected": u"3üncü"},
{"test": 6, "to": "ordinal_num", "expected": u"6ıncı"} {"test": 6, "to": "ordinal_num", "expected": u"6ıncı"},
{"test": -5, "to": "cardinal", "expected": u"eksibeş"},
{"test": -55, "to": "cardinal", "expected": u"eksiellibeş"},
{"test": -576, "to": "cardinal",
"expected": u"eksibeşyüzyetmişaltı"},
{"test": -3, "to": "currency", "expected": u"eksiüçlira"},
] ]
for casedata in testcases: for casedata in testcases: