Skip to content

Commit cc601f1

Browse files
committed
make it one return (try to reduce cognitive complexity)
1 parent 5145d37 commit cc601f1

File tree

1 file changed

+60
-60
lines changed

1 file changed

+60
-60
lines changed

pythainlp/number/thainum.py

+60-60
Original file line numberDiff line numberDiff line change
@@ -90,38 +90,38 @@ def bahttext(amount_number):
9090
"""
9191
Converts a number to Thai text and adds a suffix of "Baht" currency.
9292
93-
Similar to BAHTTEXT funcation in Excel
93+
Similar to BAHTTEXT function in Excel
9494
"""
95-
if amount_number is None:
96-
return ""
97-
98-
if amount_number == 0:
99-
return "ศูนย์บาทถ้วน"
100-
101-
amount_number = number_format(amount_number, 2).replace(" ", "")
102-
pt = amount_number.find(".")
103-
number, fraction = "", ""
104-
amount_number1 = amount_number.split(".")
95+
ret = ""
10596

106-
if not pt:
107-
number = amount_number
97+
if amount_number is None:
98+
pass
99+
elif amount_number == 0:
100+
ret = "ศูนย์บาทถ้วน"
108101
else:
109-
amount_number = amount_number.split(".")
110-
number = amount_number[0]
111-
fraction = int(amount_number1[1])
102+
amount_number = number_format(amount_number, 2).replace(" ", "")
103+
pt = amount_number.find(".")
104+
number, fraction = "", ""
105+
amount_number1 = amount_number.split(".")
112106

113-
ret = ""
114-
number = ast.literal_eval(number.replace(",", ""))
107+
if not pt:
108+
number = amount_number
109+
else:
110+
amount_number = amount_number.split(".")
111+
number = amount_number[0]
112+
fraction = int(amount_number1[1])
115113

116-
baht = num_to_thaiword(number)
117-
if baht != "":
118-
ret = "".join([ret, baht, "บาท"])
114+
number = ast.literal_eval(number.replace(",", ""))
119115

120-
satang = num_to_thaiword(fraction)
121-
if satang != "" and satang != "ศูนย์":
122-
ret = "".join([ret, satang, "สตางค์"])
123-
else:
124-
ret = "".join([ret, "ถ้วน"])
116+
baht = num_to_thaiword(number)
117+
if baht != "":
118+
ret = "".join([ret, baht, "บาท"])
119+
120+
satang = num_to_thaiword(fraction)
121+
if satang != "" and satang != "ศูนย์":
122+
ret = "".join([ret, satang, "สตางค์"])
123+
else:
124+
ret = "".join([ret, "ถ้วน"])
125125

126126
return ret
127127

@@ -131,42 +131,42 @@ def num_to_thaiword(number):
131131
:param float number: a float number (with decimals) indicating a quantity
132132
:return: a text that indicates the full amount in word form, properly ending each digit with the right term.
133133
"""
134-
if number is None:
135-
return ""
136-
137-
if number == 0:
138-
return "ศูนย์"
139-
140-
position_call = ["แสน", "หมื่น", "พัน", "ร้อย", "สิบ", ""]
141-
number_call = ["", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า"]
142-
143134
ret = ""
144-
if number > 1000000:
145-
ret += num_to_thaiword(int(number / 1000000)) + "ล้าน"
146-
number = int(math.fmod(number, 1000000))
147-
divider = 100000
148-
149-
pos = 0
150-
while number > 0:
151-
d = int(number / divider)
152-
153-
if (divider == 10) and (d == 2):
154-
ret += "ยี่"
155-
elif (divider == 10) and (d == 1):
156-
ret += ""
157-
elif (divider == 1) and (d == 1) and (ret != ""):
158-
ret += "เอ็ด"
159-
else:
160-
ret += number_call[d]
161135

162-
if d:
163-
ret += position_call[pos]
164-
else:
165-
ret += ""
166-
167-
number = number % divider
168-
divider = divider / 10
169-
pos += 1
136+
if number is None:
137+
pass
138+
elif number == 0:
139+
ret = "ศูนย์"
140+
else:
141+
_POS_CALL = ["แสน", "หมื่น", "พัน", "ร้อย", "สิบ", ""]
142+
_NUM_CALL = ["", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า"]
143+
144+
if number > 1000000:
145+
ret += num_to_thaiword(int(number / 1000000)) + "ล้าน"
146+
number = int(math.fmod(number, 1000000))
147+
divider = 100000
148+
149+
pos = 0
150+
while number > 0:
151+
d = int(number / divider)
152+
153+
if (divider == 10) and (d == 2):
154+
ret += "ยี่"
155+
elif (divider == 10) and (d == 1):
156+
ret += ""
157+
elif (divider == 1) and (d == 1) and (ret != ""):
158+
ret += "เอ็ด"
159+
else:
160+
ret += _NUM_CALL[d]
161+
162+
if d:
163+
ret += _POS_CALL[pos]
164+
else:
165+
ret += ""
166+
167+
number = number % divider
168+
divider = divider / 10
169+
pos += 1
170170

171171
return ret
172172

0 commit comments

Comments
 (0)