Q:如何將大寫金額轉換成小寫?
A:簡單點,格式比較嚴格
private float getMoney(string strBig) ...{ string strExp=""; string[] arrBig = new string[] ...{ "整","","零","+0","壹","+1","貳","+2","三","+3","肆","+4","伍","+5","陸","+6","柒","+7","捌","+8","玖","+9", "分","*0.01","角","*0.1","元","*1","拾","*10.00","佰","*100.00","仟","*1000.00","萬","*10000.00","億","*100000000.00"}; for (int i = 0; i < strBig.Length; i++) ...{ for (int j = 0; j < arrBig.Length-1;j+=2 ) ...{ if (arrBig[j] == strBig[i].ToString()) ...{ strExp += arrBig[j + 1].ToString(); continue; } } } object ret=new DataTable().Compute(strExp, ""); return float.Parse(ret.ToString()); //Console.WriteLine(getMoney("玖仟零貳拾壹元陸角肆分")); //Console.WriteLine(getMoney("玖仟萬億零貳拾壹元陸角肆分")); }
伴水兄的這個較狠
public double DecodeMoneyCn(string AText) ...{ 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 > 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 button2_Click(object sender, EventArgs e) ...{ string[] vTestText = ...{ "十二點五六", "一億零一萬零五", "四萬萬", "九十八億七千六百五十四萬三千二百一十", "五元一角四分", "壹佰元整", "三千五百萬", "九塊二毛"}; foreach (string vText in vTestText) ...{ Console.WriteLine("DecodeMoneyCn("{0}")={1}", vText, DecodeMoneyCn(vText)); } }