# -*- coding: utf-8 -*-
"""
Convert number value to Thai read out
Adapted from
http://justmindthought.blogspot.com/2012/12/code-php.html
https://suksit.com/post/writing-bahttext-in-php/
"""
import math
__all__ = ["bahttext", "num_to_thaiword"]
[docs]def bahttext(number: float) -> str:
"""
This function converts a number to Thai text and adds
a suffix "บาท" (Baht).
The precision will be fixed at two decimal places (0.00)
to fits "สตางค์" (Satang) unit.
This function works similar to `BAHTTEXT` function in MS Excel.
:param float number: number to be converted into Thai Baht currency format
:return: text representing the amount of money in the format
of Thai currency
:rtype: str
:Example:
::
from pythainlp.util import bahttext
bahttext(1)
# output: หนึ่งบาทถ้วน
bahttext(21)
# output: ยี่สิบเอ็ดบาทถ้วน
bahttext(200)
# output: สองร้อยบาทถ้วน
"""
ret = ""
if number is None:
pass
elif number == 0:
ret = "ศูนย์บาทถ้วน"
else:
num_int, num_dec = "{:.2f}".format(number).split(".")
num_int = int(num_int)
num_dec = int(num_dec)
baht = num_to_thaiword(num_int)
if baht:
ret = "".join([ret, baht, "บาท"])
satang = num_to_thaiword(num_dec)
if satang and satang != "ศูนย์":
ret = "".join([ret, satang, "สตางค์"])
else:
ret = "".join([ret, "ถ้วน"])
return ret
[docs]def num_to_thaiword(number: int) -> str:
"""
This function convert number to Thai text
:param int number: an integer number to be converted to Thai text
:return: text representing the number in Thai
:rtype: str
:Example:
::
from pythainlp.util import num_to_thaiword
num_to_thaiword(1)
# output: หนึ่ง
num_to_thaiword(11)
# output: สิบเอ็ด
"""
values = ['', 'หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า']
places = ['', 'สิบ', 'ร้อย', 'พัน', 'หมื่น', 'แสน', 'ล้าน']
exceptions = {'หนึ่งสิบ' : 'สิบ', 'สองสิบ' : 'ยี่สิบ', 'สิบหนึ่ง' : 'สิบเอ็ด'}
output = ''
number_temp = number
if number == None:
return ''
elif number == 0:
output = "ศูนย์"
number = str(abs(number))
for place,value in enumerate(list(number[::-1])):
if (place % 6 == 0 and place > 0):
output = places[6] + output
if (value != '0'):
output = values[int(value)] + places[place % 6] + output
for search,replac in exceptions.items():
output = output.replace(search,replac)
if number_temp < 0:
output = "ลบ" + output
return output