@@ -90,30 +90,38 @@ def bahttext(amount_number):
90
90
"""
91
91
Converts a number to Thai text and adds a suffix of "Baht" currency.
92
92
93
- Similar to BAHTTEXT funcation in Excel
93
+ Similar to BAHTTEXT function in Excel
94
94
"""
95
- amount_number = number_format (amount_number , 2 ).replace (" " , "" )
96
- pt = amount_number .find ("." )
97
- number , fraction = "" , ""
98
- amount_number1 = amount_number .split ("." )
95
+ ret = ""
99
96
100
- if not pt :
101
- number = amount_number
97
+ if amount_number is None :
98
+ pass
99
+ elif amount_number == 0 :
100
+ ret = "ศูนย์บาทถ้วน"
102
101
else :
103
- amount_number = amount_number .split ("." )
104
- number = amount_number [0 ]
105
- 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 ("." )
106
106
107
- ret = ""
108
- number = ast .literal_eval (number .replace ("," , "" ))
109
- baht = num_to_thaiword (number )
110
- if baht != "" :
111
- ret = "" .join ([ret , baht , "บาท" ])
112
- satang = num_to_thaiword (fraction )
113
- if satang != "" :
114
- ret = "" .join ([ret , satang , "สตางค์" ])
115
- else :
116
- ret = "" .join ([ret , "ถ้วน" ])
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 ])
113
+
114
+ number = ast .literal_eval (number .replace ("," , "" ))
115
+
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 , "ถ้วน" ])
117
125
118
126
return ret
119
127
@@ -123,38 +131,45 @@ def num_to_thaiword(number):
123
131
:param float number: a float number (with decimals) indicating a quantity
124
132
:return: a text that indicates the full amount in word form, properly ending each digit with the right term.
125
133
"""
126
- position_call = ["แสน" , "หมื่น" , "พัน" , "ร้อย" , "สิบ" , "" ]
127
- number_call = ["" , "หนึ่ง" , "สอง" , "สาม" , "สี่" , "ห้า" , "หก" , "เจ็ด" , "แปด" , "เก้า" ]
128
-
129
134
ret = ""
130
- if number == 0 :
131
- return ret
132
- if number > 1000000 :
133
- ret += num_to_thaiword (int (number / 1000000 )) + "ล้าน"
134
- number = int (math .fmod (number , 1000000 ))
135
- divider = 100000
136
-
137
- pos = 0
138
- while number > 0 :
139
- d = int (number / divider )
140
- if (divider == 10 ) and (d == 2 ):
141
- ret += "ยี่"
142
- elif (divider == 10 ) and (d == 1 ):
143
- ret += ""
144
- elif (divider == 1 ) and (d == 1 ) and (ret != "" ):
145
- ret += "เอ็ด"
146
- else :
147
- ret += number_call [d ]
148
- if d :
149
- ret += position_call [pos ]
150
- else :
151
- ret += ""
152
- number = number % divider
153
- divider = divider / 10
154
- pos += 1
135
+
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
155
170
156
171
return ret
157
172
158
173
159
174
if __name__ == "__main__" :
160
- print (bahtext (4000.0 ))
175
+ print (bahttext (4000.0 ))
0 commit comments