# -*- coding: utf-8 -*-
# SPDX-FileCopyrightText: 2016-2024 PyThaiNLP Project
# SPDX-License-Identifier: Apache-2.0
"""
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/
"""
__all__ = ["bahttext", "num_to_thaiword"]
_VALUES = [
"",
"หนึ่ง",
"สอง",
"สาม",
"สี่",
"ห้า",
"หก",
"เจ็ด",
"แปด",
"เก้า",
]
_PLACES = ["", "สิบ", "ร้อย", "พัน", "หมื่น", "แสน", "ล้าน"]
_EXCEPTIONS = {"หนึ่งสิบ": "สิบ", "สองสิบ": "ยี่สิบ", "สิบหนึ่ง": "สิบเอ็ด"}
[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 Microsoft 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 converts 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: สิบเอ็ด
"""
output = ""
number_temp = number
if number is 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