ผมต้องการแปลงตัวเลขเป็นข้อความภาษาอังกฤษครับ ซึ่งผมได้โค้ดการแปลงตัวเลขเป็นข้อความภาษาอังกฤษจากเว็บนี้ครับ
http://stackoverflow.com/questions/2729752/converting-numbers-in-to-words-c-sharp แล้วเอามาแก้ไขให้บันทึกข้อความลงใน List ซึ่งก็ใช้งานได้ดี
แต่ผมต้องการเอา List ออกไปประกาศนอก method ครับ เพื่อจะได้ใช้ ttsEN.Add() ที่ด้านนอกด้วย แต่พอประกาศที่ด้านนอกแล้ว Run จะได้ผลลัพธ์แบบนี้ครับ
four
four
thousand
five
five
hundred
and
fifteen
ซึง four กับ five ซ้ำกัน ผมจึง comment ที่ ttsEN.Add(unitsMap[number]); ผลที่ได้ถูกต้องแต่ไม่มี fifteen หลัง and ครับ ไม่ทราบว่าต้องแก้ยังไงครับ
public List<String> NumberToWordEN(int number)
{
// List<string> ttsEN = new List<string>

); // ตรงนี้ประกาศนอก method แล้วค่าผิดพลาดข้อความซ้ำกัน
var unitsMap = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
var tensMap = new[] { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
if (number == 0)
{
ttsEN.Add("zero");
return ttsEN;
}
string words = "";
if ((number / 1000000) > 0)
{
words += NumberToWordEN(number / 1000000) + " million ";
ttsEN.Add(unitsMap[(number / 1000000)]);
ttsEN.Add("million");
number %= 1000000;
}
if ((number / 1000) > 0)
{
words += NumberToWordEN(number / 1000) + " thousand ";
ttsEN.Add(unitsMap[(number / 1000)]);
ttsEN.Add("thousand");
number %= 1000;
}
if ((number / 100) > 0)
{
words += NumberToWordEN(number / 100) + " hundred ";
ttsEN.Add(unitsMap[(number / 100)]);
ttsEN.Add("hundred");
number %= 100;
}
if (number > 0)
{
if (words != "")
{
words += "and ";
ttsEN.Add("and");
}
if (number < 20)
{
words += unitsMap[number];
ttsEN.Add(unitsMap[number]); // ถ้า comment ตรงนี้จะได้ค่าถูกต้องแต่ไม่มี fifteen หลัง and
}
else
{
words += tensMap[number / 10];
ttsEN.Add(tensMap[number / 10]);
if ((number % 10) > 0)
{
words += "-" + unitsMap[number % 10];
ttsEN.Add(unitsMap[number % 10]);
}
}
}
return ttsEN;
}
C# แปลงตัวเลขเป็นข้อความภาษาอังกฤษแล้วเก็บค่าลงใน List นอก method ไม่ได้ครับ
แต่ผมต้องการเอา List ออกไปประกาศนอก method ครับ เพื่อจะได้ใช้ ttsEN.Add() ที่ด้านนอกด้วย แต่พอประกาศที่ด้านนอกแล้ว Run จะได้ผลลัพธ์แบบนี้ครับ
four
four
thousand
five
five
hundred
and
fifteen
ซึง four กับ five ซ้ำกัน ผมจึง comment ที่ ttsEN.Add(unitsMap[number]); ผลที่ได้ถูกต้องแต่ไม่มี fifteen หลัง and ครับ ไม่ทราบว่าต้องแก้ยังไงครับ
public List<String> NumberToWordEN(int number)
{
// List<string> ttsEN = new List<string>
var unitsMap = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
var tensMap = new[] { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
if (number == 0)
{
ttsEN.Add("zero");
return ttsEN;
}
string words = "";
if ((number / 1000000) > 0)
{
words += NumberToWordEN(number / 1000000) + " million ";
ttsEN.Add(unitsMap[(number / 1000000)]);
ttsEN.Add("million");
number %= 1000000;
}
if ((number / 1000) > 0)
{
words += NumberToWordEN(number / 1000) + " thousand ";
ttsEN.Add(unitsMap[(number / 1000)]);
ttsEN.Add("thousand");
number %= 1000;
}
if ((number / 100) > 0)
{
words += NumberToWordEN(number / 100) + " hundred ";
ttsEN.Add(unitsMap[(number / 100)]);
ttsEN.Add("hundred");
number %= 100;
}
if (number > 0)
{
if (words != "")
{
words += "and ";
ttsEN.Add("and");
}
if (number < 20)
{
words += unitsMap[number];
ttsEN.Add(unitsMap[number]); // ถ้า comment ตรงนี้จะได้ค่าถูกต้องแต่ไม่มี fifteen หลัง and
}
else
{
words += tensMap[number / 10];
ttsEN.Add(tensMap[number / 10]);
if ((number % 10) > 0)
{
words += "-" + unitsMap[number % 10];
ttsEN.Add(unitsMap[number % 10]);
}
}
}
return ttsEN;
}