c# - 使用 c# 代码将数字转换为越南语单词
问题描述
我有下面的 C# 代码用于英语的数字到单词。
public static string NumberToWords(int number)
{
if (number == 0)
return "zero";
if (number < 0)
return "minus " + NumberToWords(Math.Abs(number));
string words = string.Empty;
if ((number / 1000000) > 0)
{
words += NumberToWords(number / 1000000) + " million ";
number %= 1000000;
}
if ((number / 1000) > 0)
{
words += NumberToWords(number / 1000) + " thousand ";
number %= 1000;
}
if ((number / 100) > 0)
{
words += NumberToWords(number / 100) + " hundred ";
number %= 100;
}
if (number > 0)
{
if (words != "")
words += "and ";
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 < 20)
words += unitsMap[number];
else
{
words += tensMap[number / 10];
if ((number % 10) > 0)
words += " " + unitsMap[number % 10];
}
}
return words;
}
我在谷歌上找到了这个 GitHub,但它没有 C# 代码。当我尝试谷歌翻译并将值替换为上面的代码结果是错误的。
越南代码但不是 C# GitHub 代码
使用谷歌替换越南数字的值后,输出应如下所示,但它失败了。
预期产出 -
-55 = Âm năm mươi lăm
-1,055 = Âm một nghìn không trăm năm mươi lăm
101,002,101,000,000,000 = Một trăm lẻ một triệu tỷ không trăm lẻ hai nghìn tỷ một trăm lẻ một tỷ
100,000,000,000 = Một trăm tỷ
1,000,000,000,000 = Một nghìn tỷ
1,000,000,000,000,000 = Một triệu tỷ
1,000,000,000,000,000,000 = Một tỷ tỷ
1,000,000,234,000,000,000 = Một tỷ tỷ hai trăm ba mươi tư tỷ
1,000,000,000,222,000,000 = Một tỷ tỷ hai trăm hai mươi hai triệu
1,009 = Một nghìn không trăm lẻ chín
9 = Chín
90 = Chín mươi
900 = Chín trăm
1,000,000 = Một triệu
1,090,000 = Một triệu không trăm chín mươi nghìn
1,090,010 = Một triệu không trăm chín mươi nghìn không trăm mười
1,000,010 = Một triệu không trăm mười
10 = Mười
100 = Một trăm
55 = Năm mươi lăm
解决方案
您可以使用以下功能。我已经做了很长时间了。
public string OutputWord(int position, int[] digits)
{
string[] Ones = new string[] { "Zero", "One",
"Two", "Three", "Four", "Five", "Six", "Seven", "Eight",
"Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen",
"Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen",
"Twenty" };
string[] Tens = new string[] { "Zero", "Ten",
"Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy",
"Eighty", "Ninety" };
string output = string.Empty;
switch (position)
{
case 5:
if (digits.Length <= 6)
output = Ones[digits[position]] + "
Lac";
break;
case 4:
int thousand =
Convert.ToInt32(digits[position].ToString() +
digits[position - 1].ToString());
if (thousand < 20)
output = Ones[thousand] + " Thousand";
else
output = Tens[digits[position]] + " " +
Ones[digits[position - 1]] + " Thousand";
break;
case 3:
if (digits.Length <= 4)
output = Ones[digits[position]] + "
Thousand";
break;
case 2:
output = Ones[digits[position]] + "
Hundred";
break;
case 1:
output = Tens[digits[position]] + " " +
Ones[digits[position - 1]];
break;
case 0:
output = Ones[digits[position]];
break;
}
return output;
}
你可以打电话。
string output = string.Empty;
int[] digits = new int[input.ToString().Length];
if (input <= 20)
{
digits[0] = input;
output = obj.OutputWord(0, digits);
}
推荐阅读
- python - 在多个进程之间共享 Python dict
- python - Pyrebase:从第二个 get().val() 返回 None
- ssis - 打开 Biml 解决方案崩溃 VS2019
- android - 调试正常时无法构建发布 APK
- c++ - 尝试使用 Emscripten 构建 C++ SDL2 项目时未定义的符号
- r - 从单独的数据框列表中的列表中的数据框中提取列
- android - Kotlin - 与 Recyclerview 滚动同步移动视图
- javascript - 如何更改下面的 javascript 代码,以便我的 div 样式切换从显示无开始到显示网格?
- charts - 条形图方向的折线图
- mysql - 当外连接的主表为空时如何获取值?