Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

## Bahttext
Tool to convert currency number to Thai text number
Support Python2 and Python3

## Installation
```
Expand All @@ -14,5 +15,5 @@ pip install bahttext
>>> number = 12345.21
>>> print bahttext(number)
หนึ่งหมื่นสองพันสามร้อยสี่สิบห้าบาทยี่สิบเอ็ดสตางค์
>>>
>>>
```
31 changes: 17 additions & 14 deletions bahttext/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
# All rights reserved. check LICENSE for more detail.
# Seksan Poltree <seksan@morange.co.th>, 2014.

thainum = [u"ศูนย์", u"หนึ่ง", u"สอง", u"สาม",
u"สี่", u"ห้า", u"หก", u"เจ็ด", u"แปด", u"เก้า"]
thaimulti = [u"", u"สิบ", u"ร้อย", u"พัน", u"หมื่น", u"แสน", u"ล้าน"]
from __future__ import unicode_literals
# from builtins import str

thainum = ['ศูนย์', 'หนึ่ง', 'สอง', 'สาม',
'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า']
thaimulti = ['', 'สิบ', 'ร้อย', 'พัน', 'หมื่น', 'แสน', 'ล้าน']


def split_million_sequence(seq):
Expand All @@ -19,22 +22,22 @@ def split_million_sequence(seq):

def convert_special_twodigit(int_string):

baht_string = u''
baht_string = ''

if int_string[0] == '1':
pass
elif int_string[0] == '2':
baht_string += u"ยี่"
baht_string += 'ยี่'
elif int_string[0] in "3456789":
baht_string += thainum[int(int_string[0])]

if int_string[0] != '0':
baht_string += u'สิบ'
baht_string += 'สิบ'

if int_string[1] == '0':
pass
elif int_string[1] == '1':
baht_string += u'เอ็ด'
baht_string += 'เอ็ด'
else:
baht_string += thainum[int(int_string[1])]

Expand All @@ -43,7 +46,7 @@ def convert_special_twodigit(int_string):

def convert_multiple_million(int_string, is_million=False):

baht_string = u''
baht_string = ''

# integer number part
if len(int_string) == 1:
Expand All @@ -65,11 +68,11 @@ def convert_multiple_million(int_string, is_million=False):

def bahttext(input_float):

baht_string = u''
baht_string = ''

if input_float < 0:
input_float *= -1
baht_string += u'ลบ'
baht_string += 'ลบ'

float_string = '%0.2f' % input_float
input_string = str(float_string).split('.')
Expand All @@ -91,14 +94,14 @@ def bahttext(input_float):
million_group_string, is_million)

if million_index > 0:
baht_string += u'ล้าน'
baht_string += 'ล้าน'
million_index -= 1

baht_string += u'บาท'
baht_string += 'บาท'

# decimal number part
if int(decimal_string) == 0:
baht_string += u'ถ้วน'
baht_string += 'ถ้วน'

else:
if len(decimal_string) == 1:
Expand All @@ -107,6 +110,6 @@ def bahttext(input_float):
elif len(decimal_string) == 2:
baht_string += convert_special_twodigit(decimal_string)

baht_string += u'สตางค์'
baht_string += 'สตางค์'

return baht_string
6 changes: 3 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
from distutils.core import setup

setup(name='bahttext',
version='1.0',
version='1.0.2',
description='Tool for convert currency number to Thai text',
author='Seksan Poltree',
author_email='seksan@morange.co.th',
url='https://github.com/morangesolution/bahttext',
download_url='https://github.com/morangesolution/bahttext/tarball/master',
url='https://github.com/sekz/bahttext',
download_url='https://github.com/sekz/bahttext/tarball/master',
packages=['bahttext'],
license="BSD",
)
Expand Down
83 changes: 42 additions & 41 deletions test_bahttext.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,86 +4,87 @@
# This file is distributed under the same license as the bahttext package.
# All rights reserved.
# Seksan Poltree <seksan@morange.co.th>, 2014.

from __future__ import unicode_literals
from builtins import str
import unittest
from bahttext import bahttext


class TestBahtText(unittest.TestCase):

def test_input_is_a_number_then_can_convert_to_string(self):
self.assertIsInstance(bahttext(1.0), unicode)
self.assertIsInstance(bahttext(1.0), str)

def test_input_is_not_number_then_raise_error(self):
with self.assertRaises(TypeError) as ex:
bahttext('text input')
self.assertIsInstance(ex.exception, TypeError)

def test_input_integer_one_digit_can_convert(self):
self.assertEqual(bahttext(0.0), u'ศูนย์บาทถ้วน')
self.assertEqual(bahttext(1.0), u'หนึ่งบาทถ้วน')
self.assertEqual(bahttext(2.0), u'สองบาทถ้วน')
self.assertEqual(bahttext(5.0), u'ห้าบาทถ้วน')
self.assertEqual(bahttext(0.0), 'ศูนย์บาทถ้วน')
self.assertEqual(bahttext(1.0), 'หนึ่งบาทถ้วน')
self.assertEqual(bahttext(2.0), 'สองบาทถ้วน')
self.assertEqual(bahttext(5.0), 'ห้าบาทถ้วน')

def test_number_in_multiple_could_show_sip(self):
self.assertEqual(bahttext(10.0), u'สิบบาทถ้วน')
self.assertEqual(bahttext(20.0), u'ยี่สิบบาทถ้วน')
self.assertEqual(bahttext(50.0), u'ห้าสิบบาทถ้วน')
self.assertEqual(bahttext(11.0), u'สิบเอ็ดบาทถ้วน')
self.assertEqual(bahttext(15.0), u'สิบห้าบาทถ้วน')
self.assertEqual(bahttext(10.0), 'สิบบาทถ้วน')
self.assertEqual(bahttext(20.0), 'ยี่สิบบาทถ้วน')
self.assertEqual(bahttext(50.0), 'ห้าสิบบาทถ้วน')
self.assertEqual(bahttext(11.0), 'สิบเอ็ดบาทถ้วน')
self.assertEqual(bahttext(15.0), 'สิบห้าบาทถ้วน')

def test_input_one_interger_wth_decimal_can_convert(self):
self.assertEqual(bahttext(1.10), u'หนึ่งบาทสิบสตางค์')
self.assertEqual(bahttext(2.50), u'สองบาทห้าสิบสตางค์')
self.assertEqual(bahttext(3.75), u'สามบาทเจ็ดสิบห้าสตางค์')
self.assertEqual(bahttext(1.10), 'หนึ่งบาทสิบสตางค์')
self.assertEqual(bahttext(2.50), 'สองบาทห้าสิบสตางค์')
self.assertEqual(bahttext(3.75), 'สามบาทเจ็ดสิบห้าสตางค์')

def test_number_ending_with_one_could_show_edd(self):
self.assertEqual(bahttext(4.81), u'สี่บาทแปดสิบเอ็ดสตางค์')
self.assertEqual(bahttext(4.81), 'สี่บาทแปดสิบเอ็ดสตางค์')

def test_number_start_with_two_could_show_yee(self):
self.assertEqual(bahttext(2.21), u'สองบาทยี่สิบเอ็ดสตางค์')
self.assertEqual(bahttext(2.21), 'สองบาทยี่สิบเอ็ดสตางค์')

def test_number_hundred_should_show_roi(self):
self.assertEqual(bahttext(100.0), u'หนึ่งร้อยบาทถ้วน')
self.assertEqual(bahttext(101.0), u'หนึ่งร้อยเอ็ดบาทถ้วน')
self.assertEqual(bahttext(200.0), u'สองร้อยบาทถ้วน')
self.assertEqual(bahttext(201.0), u'สองร้อยเอ็ดบาทถ้วน')

def test_number_thoundsand_should_show_pan(self):
self.assertEqual(bahttext(1000.0), u'หนึ่งพันบาทถ้วน')
self.assertEqual(bahttext(2000.10), u'สองพันบาทสิบสตางค์')
self.assertEqual(bahttext(100.0), 'หนึ่งร้อยบาทถ้วน')
self.assertEqual(bahttext(101.0), 'หนึ่งร้อยเอ็ดบาทถ้วน')
self.assertEqual(bahttext(200.0), 'สองร้อยบาทถ้วน')
self.assertEqual(bahttext(201.0), 'สองร้อยเอ็ดบาทถ้วน')

def test_number_thousand_should_show_pan(self):
self.assertEqual(bahttext(1000.0), 'หนึ่งพันบาทถ้วน')
self.assertEqual(bahttext(2000.10), 'สองพันบาทสิบสตางค์')
self.assertEqual(
bahttext(3211.51), u'สามพันสองร้อยสิบเอ็ดบาทห้าสิบเอ็ดสตางค์')
self.assertEqual(bahttext(8000.31), u'แปดพันบาทสามสิบเอ็ดสตางค์')
bahttext(3211.51), 'สามพันสองร้อยสิบเอ็ดบาทห้าสิบเอ็ดสตางค์')
self.assertEqual(bahttext(8000.31), 'แปดพันบาทสามสิบเอ็ดสตางค์')

def test_number_ten_thoundsand_should_show_muern(self):
self.assertEqual(bahttext(30000.0), u'สามหมื่นบาทถ้วน')
def test_number_ten_thousand_should_show_muern(self):
self.assertEqual(bahttext(30000.0), 'สามหมื่นบาทถ้วน')
self.assertEqual(
bahttext(98765.10), u'เก้าหมื่นแปดพันเจ็ดร้อยหกสิบห้าบาทสิบสตางค์')
bahttext(98765.10), 'เก้าหมื่นแปดพันเจ็ดร้อยหกสิบห้าบาทสิบสตางค์')
self.assertEqual(
bahttext(30211.21), u'สามหมื่นสองร้อยสิบเอ็ดบาทยี่สิบเอ็ดสตางค์')
bahttext(30211.21), 'สามหมื่นสองร้อยสิบเอ็ดบาทยี่สิบเอ็ดสตางค์')

def test_number_hundred_thoundsand_should_show_saan(self):
self.assertEqual(bahttext(800000.0), u'แปดแสนบาทถ้วน')
def test_number_hundred_thousand_should_show_saan(self):
self.assertEqual(bahttext(800000.0), 'แปดแสนบาทถ้วน')
self.assertEqual(
bahttext(258065.81), u'สองแสนห้าหมื่นแปดพันหกสิบห้าบาทแปดสิบเอ็ดสตางค์')
bahttext(258065.81), 'สองแสนห้าหมื่นแปดพันหกสิบห้าบาทแปดสิบเอ็ดสตางค์')

def test_number_million_should_show_laan(self):
self.assertEqual(bahttext(3500000.0), u'สามล้านห้าแสนบาทถ้วน')
self.assertEqual(bahttext(3500000.0), 'สามล้านห้าแสนบาทถ้วน')

def test_number_multiple_million_should_show_multiple_laan(self):
self.assertEqual(bahttext(12000000.0), u'สิบสองล้านบาทถ้วน')
self.assertEqual(bahttext(21000000.0), u'ยี่สิบเอ็ดล้านบาทถ้วน')
self.assertEqual(bahttext(12000000.0), 'สิบสองล้านบาทถ้วน')
self.assertEqual(bahttext(21000000.0), 'ยี่สิบเอ็ดล้านบาทถ้วน')
self.assertEqual(
bahttext(51000000000000.51), u'ห้าสิบเอ็ดล้านล้านบาทห้าสิบเอ็ดสตางค์')
bahttext(51000000000000.51), 'ห้าสิบเอ็ดล้านล้านบาทห้าสิบเอ็ดสตางค์')
self.assertEqual(
bahttext(10000000680000.51), u'สิบล้านล้านหกแสนแปดหมื่นบาทห้าสิบเอ็ดสตางค์')
bahttext(10000000680000.51), 'สิบล้านล้านหกแสนแปดหมื่นบาทห้าสิบเอ็ดสตางค์')

def test_negative_minus_prefix_number_should_print_loob(self):
self.assertEqual(bahttext(-1.10), u'ลบหนึ่งบาทสิบสตางค์')
self.assertEqual(bahttext(-1000.0), u'ลบหนึ่งพันบาทถ้วน')
self.assertEqual(bahttext(-1.10), 'ลบหนึ่งบาทสิบสตางค์')
self.assertEqual(bahttext(-1000.0), 'ลบหนึ่งพันบาทถ้วน')
self.assertEqual(
bahttext(-258065.81), u'ลบสองแสนห้าหมื่นแปดพันหกสิบห้าบาทแปดสิบเอ็ดสตางค์')
bahttext(-258065.81), 'ลบสองแสนห้าหมื่นแปดพันหกสิบห้าบาทแปดสิบเอ็ดสตางค์')

if __name__ == '__main__':
unittest.main()