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("玖仟万亿零贰拾壹元陆角肆分"));
        }

解决方案 »

  1.   


    public static Decimal GetDecimal(object sNum)
            {
                return GetDecimal(sNum, 0);
            }
            public static Decimal GetDecimal(object sNum, Decimal iDefault)
            {
                return GetDecimal(sNum, 0, -1);
            }
            public static Decimal GetDecimal(object sNum, Decimal iDefault, int iDotNum)
            {
                try
                {
                    Decimal d = Convert.ToDecimal(sNum);
                    if (iDotNum == -1)
                    {
                        string s = d.ToString();
                        for (int i = s.Length - 1; i >= 0; i--)
                        {
                            if (s.IndexOf('.') > -1 && (s[i] == '0' || s[i] == '.'))
                            {
                                s = s.Substring(0, s.Length - 1);
                            }
                            else
                            {
                                break;
                            }
                        }
                        d = Convert.ToDecimal(s);
                        return d;
                    }
                    else
                    {
                        return Math.Round(d, iDotNum);
                    }
    public static Decimal GetDecimal(object sNum)
            {
                return GetDecimal(sNum, 0);
            }
            public static Decimal GetDecimal(object sNum, Decimal iDefault)
            {
                return GetDecimal(sNum, 0, -1);
            }
            public static Decimal GetDecimal(object sNum, Decimal iDefault, int iDotNum)
            {
                try
                {
                    Decimal d = Convert.ToDecimal(sNum);
                    if (iDotNum == -1)
                    {
                        string s = d.ToString();
                        for (int i = s.Length - 1; i >= 0; i--)
                        {
                            if (s.IndexOf('.') > -1 && (s[i] == '0' || s[i] == '.'))
                            {
                                s = s.Substring(0, s.Length - 1);
                            }
                            else
                            {
                                break;
                            }
                        }
                        d = Convert.ToDecimal(s);
                        return d;
                    }
                    else
                    {
                        return Math.Round(d, iDotNum);
                    }
    private static string UpperMoney(string sNum, string[] sUpperNum, string[] upperUnit)
            {
                return UpperMoney(sNum, sUpperNum, upperUnit, false);
            }
            private static string UpperMoney(string sNum, string[] sUpperNum, string[] upperUnit,bool b)
            {
                char[] cNums = sNum.ToCharArray();
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < sNum.Length; i++)
                {
                    int iNum = int.Parse(cNums[i].ToString());
                    string unit = string.Empty;
                    if (iNum != 0)
                    {
                        if (b)
                            unit = upperUnit[i];
                        else
                            unit = upperUnit[sNum.Length - i - 1];
                    }
                    else if (AddUnitAtZero(sNum.Length - i))
                    {
                        if (!b)
                            unit = upperUnit[sNum.Length - i - 1];
                    }
                    sb.Append(sUpperNum[iNum] + unit);
                }
                return ReplaceInvalid(sb.ToString());
            }
            private static bool AddUnitAtZero(int index)
            {
                for (int i = 0; i < 8; i++)
                {
                    if (index == 4 * i + 1) return true;
                }
                return false;
            }
     private static string ReplaceInvalid(string sNum)
            {
                while (sNum.LastIndexOf("零零") != -1 || sNum.LastIndexOf("零元") != -1|| sNum.LastIndexOf("零萬") != -1|| sNum.LastIndexOf("零億") != -1 
                    || sNum.LastIndexOf("零兆") != -1|| sNum.LastIndexOf("億萬") != -1 || sNum.LastIndexOf("兆萬億") != -1 ||sNum.LastIndexOf("京億兆")!=-1)
                {
                    sNum = sNum.Replace("零零", "零").Replace("零元", "元").Replace("零萬", "萬").Replace("零億", "億");
                    sNum = sNum.Replace("零兆", "兆").Replace("億萬", "億").Replace("兆萬億", "兆").Replace("京億兆", "京");
                }
                return sNum + "整" == "元整" ? "零元整" : sNum + "整";
            }
      

  2.   

    临时写得,还没经过全面测试
    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));
        }
    }
    部分测试结果如下
    [code=BatchFile]DecodeMoneyCn("十二点五六")=2.56
    DecodeMoneyCn("一亿零一万零五")=100010005
    DecodeMoneyCn("四万万")=400000000
    DecodeMoneyCn("九十八亿七千六百五十四万三千二百一十")=9876543210
    DecodeMoneyCn("五元一角四分")=5.14
    DecodeMoneyCn("壹佰元整")=100
    DecodeMoneyCn("三千五百万")=35000000
    DecodeMoneyCn("九块二毛")=9.2[/code]