Skip to content

Commit c427b0c

Browse files
Copilotwannaphong
andcommitted
Improve NumToWord: use StringBuilder and support long for larger numbers
Co-authored-by: wannaphong <8536487+wannaphong@users.noreply.github.com>
1 parent 533d6e8 commit c427b0c

File tree

1 file changed

+39
-20
lines changed

1 file changed

+39
-20
lines changed

thainlp/NumToWord.cs

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Text;
34

45
namespace 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

Comments
 (0)