使用C#实现阿拉伯数字到大写中文的转换
menway csdn 2003-5-8
//Money类
using System;
namespace Money
{
/// <summary>
/// 本类实现阿拉伯数字到大写中文的转换
/// 该类没有对非法数字进行判别
/// 请调用NumToChn方法
/// 作者:menway
/// </summary>
public class Money
{
public Money()
{
//
// TODO: Add constructor logic here
//
}
private char 转换数字(char x)
{
string stringChnNames = "零一二三四五六七八九";
string stringNumNames = "0123456789";
return stringChnNames[stringNumNames.IndexOf(x)];
}
private string 转换万以下整数(string x)
{
string[] stringArrayLevelNames = new string[4] { "", "十", "百", "千" };
string ret = "";
int i;
for (i = x.Length - 1; i >= 0; i--)
if (x[i] == '0')
ret = 转换数字(x[i]) + ret;
else
ret = 转换数字(x[i]) + stringArrayLevelNames[x.Length - 1 - i] + ret;
while ((i = ret.IndexOf("零零")) != -1)
ret = ret.Remove(i, 1);
if (ret[ret.Length - 1] == '零' && ret.Length > 1)
ret = ret.Remove(ret.Length - 1, 1);
if (ret.Length >= 2 && ret.Substring(0, 2) == "一十")
ret = ret.Remove(0, 1);
return ret;
}
private string 转换整数(string x)
{
int len = x.Length;
string ret, temp;
if (len <= 4)
ret = 转换万以下整数(x);
else if (len <= 8)
{
ret = 转换万以下整数(x.Substring(0, len - 4)) + "万";
temp = 转换万以下整数(x.Substring(len - 4, 4));
if (temp.IndexOf("千") == -1 && temp != "")
ret += "零" + temp;
else
ret += temp;
}
else
{
ret = 转换万以下整数(x.Substring(0, len - 8)) + "亿";
temp = 转换万以下整数(x.Substring(len - 8, 4));
if (temp.IndexOf("千") == -1 && temp != "")
ret += "零" + temp;
else
ret += temp;
ret += "万";
temp = 转换万以下整数(x.Substring(len - 4, 4));
if (temp.IndexOf("千") == -1 && temp != "")
ret += "零" + temp;
else
ret += temp;
}
int i;
if ((i = ret.IndexOf("零万")) != -1)
ret = ret.Remove(i + 1, 1);
while ((i = ret.IndexOf("零零")) != -1)
ret = ret.Remove(i, 1);
if (ret[ret.Length - 1] == '零' && ret.Length > 1)
ret = ret.Remove(ret.Length - 1, 1);
return ret;
}
private string 转换小数(string x)
{
string ret = "";
for (int i = 0; i < x.Length; i++)
ret += 转换数字(x[i]);
return ret;
}
public string NumToChn(string x)
{
if (x.Length == 0)
return "";
string ret = "";
if (x[0] == '-')
{
ret = "负";
x = x.Remove(0, 1);
}
if (x[0].ToString() == ".")
x = "0" + x;
if (x[x.Length - 1].ToString() == ".")
x = x.Remove(x.Length - 1, 1);
if (x.IndexOf(".") > -1)
ret += 转换整数(x.Substring(0, x.IndexOf("."))) + "点" + 转换小数(x.Substring(x.IndexOf(".") + 1));
else
ret += 转换整数(x);
return ret;
}
}
}
//测试工程
using System;
namespace Money
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class MoneyApp
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
Money myMoney = new Money();
string x;
while (true)
{
Console.Write("X=");
x = Console.ReadLine();
if (x == "") break;
Console.WriteLine("{0}={1}", x, myMoney.NumToChn(x));
}
}
}
}