11using System ;
22using System . Collections . Generic ;
3+ using System . Text ;
34
45namespace Thainlp
56{
@@ -64,41 +65,43 @@ public class NumToWord
6465 /// </example>
6566 public static string BahtText ( double ? number )
6667 {
67- string ret = "" ;
68-
6968 if ( number == null )
7069 {
71- return ret ;
70+ return "" ;
7271 }
7372 else if ( number == 0 )
7473 {
75- ret = "ศูนย์บาทถ้วน" ;
74+ return "ศูนย์บาทถ้วน" ;
7675 }
7776 else
7877 {
7978 string formatted = number . Value . ToString ( "F2" ) ;
8079 string [ ] parts = formatted . Split ( '.' ) ;
81- int numInt = int . Parse ( parts [ 0 ] ) ;
80+
81+ // Use long to handle larger numbers
82+ long numInt = long . Parse ( parts [ 0 ] ) ;
8283 int numDec = int . Parse ( parts [ 1 ] ) ;
8384
85+ var result = new StringBuilder ( ) ;
86+
8487 string baht = NumToThaiWord ( numInt ) ;
8588 if ( ! string . IsNullOrEmpty ( baht ) )
8689 {
87- ret = ret + baht + "บาท" ;
90+ result . Append ( baht ) . Append ( "บาท" ) ;
8891 }
8992
9093 string satang = NumToThaiWord ( numDec ) ;
9194 if ( ! string . IsNullOrEmpty ( satang ) && satang != "ศูนย์" )
9295 {
93- ret = ret + satang + "สตางค์" ;
96+ result . Append ( satang ) . Append ( "สตางค์" ) ;
9497 }
9598 else
9699 {
97- ret = ret + "ถ้วน" ;
100+ result . Append ( "ถ้วน" ) ;
98101 }
99- }
100102
101- return ret ;
103+ return result . ToString ( ) ;
104+ }
102105 }
103106
104107 /// <summary>
@@ -117,48 +120,64 @@ public static string BahtText(double? number)
117120 /// </example>
118121 public static string NumToThaiWord ( int ? number )
119122 {
120- string output = "" ;
123+ if ( number == null )
124+ {
125+ return "" ;
126+ }
127+ return NumToThaiWord ( ( long ) number . Value ) ;
128+ }
121129
130+ /// <summary>
131+ /// This function converts number to Thai text.
132+ /// </summary>
133+ /// <param name="number">A long number to be converted to Thai text</param>
134+ /// <returns>Text representing the number in Thai</returns>
135+ public static string NumToThaiWord ( long ? number )
136+ {
122137 if ( number == null )
123138 {
124- return output ;
139+ return "" ;
125140 }
126141 else if ( number == 0 )
127142 {
128- output = "ศูนย์" ;
129- return output ;
143+ return "ศูนย์" ;
130144 }
131145
132- int numberTemp = number . Value ;
146+ long numberTemp = number . Value ;
133147 string numberStr = Math . Abs ( number . Value ) . ToString ( ) ;
134148 char [ ] digits = numberStr . ToCharArray ( ) ;
135149 Array . Reverse ( digits ) ;
136150
151+ var output = new StringBuilder ( ) ;
152+
137153 for ( int place = 0 ; place < digits . Length ; place ++ )
138154 {
139155 if ( place % 6 == 0 && place > 0 )
140156 {
141- output = _PLACES [ 6 ] + output ;
157+ output . Insert ( 0 , _PLACES [ 6 ] ) ;
142158 }
143159
144160 if ( digits [ place ] != '0' )
145161 {
146162 int value = int . Parse ( digits [ place ] . ToString ( ) ) ;
147- output = _VALUES [ value ] + _PLACES [ place % 6 ] + output ;
163+ output . Insert ( 0 , _PLACES [ place % 6 ] ) ;
164+ output . Insert ( 0 , _VALUES [ value ] ) ;
148165 }
149166 }
150167
168+ string result = output . ToString ( ) ;
169+
151170 foreach ( var exception in _EXCEPTIONS )
152171 {
153- output = output . Replace ( exception . Key , exception . Value ) ;
172+ result = result . Replace ( exception . Key , exception . Value ) ;
154173 }
155174
156175 if ( numberTemp < 0 )
157176 {
158- output = "ลบ" + output ;
177+ result = "ลบ" + result ;
159178 }
160179
161- return output ;
180+ return result ;
162181 }
163182 }
164183}
0 commit comments