再造轮子--中文金额转换 C#正则版
最近在学习C# 正则方面的编程,出于练习的目的,
改了一下原来的 中文金额转换 方法,感觉效率比以前的高了许多
拿来跟大家分享一下,欢迎大家来拍砖啊...
代码:
Code
Code
public string ConvertToCnNum(string num)
{
Regex regNum = new Regex(@"^([1-9]\d+|[1-9])(\.\d\d?)*$");
Match matchNum = regNum.Match(num);
if (matchNum.Success)
{
string[] AA = new string[10] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
string[] BB = new string[8] { "", "拾", "佰", "仟", "萬", "億", "", "" };
string[] a = Regex.Replace(num,"(^0*)","").Split('.');
int k = 0; string re = "";
for (int i = a[0].Length - 1; i >= 0;i-- )
{
char[] ca = a[0].ToCharArray();
string aTemp = "";
try
{
aTemp = Convert.ToString(ca[i + 2]);
}
catch { }
string bTemp = "";
try
{
bTemp = Convert.ToString(ca[i + 1]);
}
catch { }
if (aTemp != "0" && aTemp!="" && bTemp == "0")
{
re = AA[0] + re;
}
switch (k)
{
case 0: re = BB[7] + re; break;
case 4:
Regex regTemp = new Regex(@"0{4}\d{" + (a[0].Length - i - 1)+"}$");
Match matchTemp = regTemp.Match(a[0]);
if (!matchTemp.Success)
{
re = BB[4] + re;
}
break;
case 8: re = BB[5] + re; BB[7] = BB[5]; k = 0; break;
}
char[] caTemp = a[0].ToCharArray();
string cTemp = Convert.ToString(caTemp[i]);
if (cTemp != "0")
{
re=AA[Convert.ToInt32(cTemp)]+BB[k%4]+re;
}
k++;
}
re=re.Replace(@"零萬","萬零");
re = re.Replace(@"零億", "億零");
re = re + "圆";
if(a.Length>1)
{
re+=BB[6];
for(int i=0;i<a[1].Length;i++)
{
char[] caTemp = a[1].ToCharArray();
string dTemp = Convert.ToString(caTemp[i]);
if(i==0)
{
re+=AA[Convert.ToInt32(dTemp)]+"角";
}
if(i==1)
{
re+=AA[Convert.ToInt32(dTemp)]+"分";
}
}
}
else if(re!="") re+="整";
return re;
}
else
{
//不是数字
}
return "error";
}
public string ConvertToCnNum(string num)
{
Regex regNum = new Regex(@"^([1-9]\d+|[1-9])(\.\d\d?)*$");
Match matchNum = regNum.Match(num);
if (matchNum.Success)
{
string[] AA = new string[10] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
string[] BB = new string[8] { "", "拾", "佰", "仟", "萬", "億", "", "" };
string[] a = Regex.Replace(num,"(^0*)","").Split('.');
int k = 0; string re = "";
for (int i = a[0].Length - 1; i >= 0;i-- )
{
char[] ca = a[0].ToCharArray();
string aTemp = "";
try
{
aTemp = Convert.ToString(ca[i + 2]);
}
catch { }
string bTemp = "";
try
{
bTemp = Convert.ToString(ca[i + 1]);
}
catch { }
if (aTemp != "0" && aTemp!="" && bTemp == "0")
{
re = AA[0] + re;
}
switch (k)
{
case 0: re = BB[7] + re; break;
case 4:
Regex regTemp = new Regex(@"0{4}\d{" + (a[0].Length - i - 1)+"}$");
Match matchTemp = regTemp.Match(a[0]);
if (!matchTemp.Success)
{
re = BB[4] + re;
}
break;
case 8: re = BB[5] + re; BB[7] = BB[5]; k = 0; break;
}
char[] caTemp = a[0].ToCharArray();
string cTemp = Convert.ToString(caTemp[i]);
if (cTemp != "0")
{
re=AA[Convert.ToInt32(cTemp)]+BB[k%4]+re;
}
k++;
}
re=re.Replace(@"零萬","萬零");
re = re.Replace(@"零億", "億零");
re = re + "圆";
if(a.Length>1)
{
re+=BB[6];
for(int i=0;i<a[1].Length;i++)
{
char[] caTemp = a[1].ToCharArray();
string dTemp = Convert.ToString(caTemp[i]);
if(i==0)
{
re+=AA[Convert.ToInt32(dTemp)]+"角";
}
if(i==1)
{
re+=AA[Convert.ToInt32(dTemp)]+"分";
}
}
}
else if(re!="") re+="整";
return re;
}
else
{
//不是数字
}
return "error";
}