正則表達式實現起來還是挺難的……
可以參考壹下這個:
public?double?DecodeMoneyCn(string?AText){
AText?=?AText.Replace("億億",?"兆");
AText?=?AText.Replace("萬萬",?"億");
AText?=?AText.Replace("點",?"元");
AText?=?AText.Replace("塊",?"元");
AText?=?AText.Replace("毛",?"角");
double?vResult?=?0;
double?vNumber?=?0;?//?當前數字
double?vTemp?=?0;
int?vDecimal?=?0;?//?是否出現小數點
foreach?(char?vChar?in?AText)
{
int?i?=?"零壹二三四五六七八九".IndexOf(vChar);
if?(i?<?0)?i?=?"洞幺兩三四五六拐八勾".IndexOf(vChar);
if?(i?<?0)?i?=?"零壹貳三肆伍陸柒捌玖".IndexOf(vChar);
if?(i?>?0)
{
vNumber?=?i;
if?(vDecimal?>?0)
{
vResult?+=?vNumber?*?Math.Pow(10,?-vDecimal);
vDecimal++;
vNumber?=?0;
}
}
else
{
i?=?"元十百千萬億".IndexOf(vChar);
if?(i?<?0)?i?=?"整拾佰仟萬億兆".IndexOf(vChar);
if?(i?==?5)?i?=?8;
if?(i?==?6)?i?=?12;
if?(i?>?0)
{
if?(i?>=?4)
{
vTemp?+=?vNumber;
if?(vTemp?==?0)?vTemp?=?1;
vResult?+=?vTemp?*?Math.Pow(10,?i);
vTemp?=?0;
}
else?vTemp?+=?vNumber?*?Math.Pow(10,?i);
}
else
{
i?=?"元角分".IndexOf(vChar);
if?(i?>?0)
{
vTemp?+=?vNumber;
vResult?+=?vTemp?*?Math.Pow(10,?-i);
vTemp?=?0;
}
else?if?(i?==?0)
{
vTemp?+=?vNumber;
vResult?+=?vTemp;
vDecimal?=?1;
vTemp?=?0;
}
}
vNumber?=?0;
}
}
return?vResult?+?vTemp?+?vNumber;
}
private?void?button1_Click(object?sender,?EventArgs?e)
{
string[]?vTestText?=?{?
"十二點五六",?
"壹億零壹萬零五",?
"四萬萬",?
"九十八億七千六百五十四萬三千二百壹十",
"五元壹角四分",?"壹佰元整",
"三千五百萬",
"九塊二毛"};
foreach?(string?vText?in?vTestText)
{
Console.WriteLine("DecodeMoneyCn(\"{0}\")={1}",?vText,?
DecodeMoneyCn(vText));
}
//輸出
//DecodeMoneyCn("十二點五六")=2.56
//DecodeMoneyCn("壹億零壹萬零五")=100010005
//DecodeMoneyCn("四萬萬")=400000000
//DecodeMoneyCn("九十八億七千六百五十四萬三千二百壹十")=9876543210
//DecodeMoneyCn("五元壹角四分")=5.14
//DecodeMoneyCn("壹佰元整")=100
//DecodeMoneyCn("三千五百萬")=35000000
//DecodeMoneyCn("九塊二毛")=9.2
//DecodeMoneyCn("壹兆")=1000000000000
}