大家能帮我看下吗,我写的这个有没有出错的情况。我这个只转换整数部分
        //人民币大写转换
        //零壹贰叁肆伍陆柒捌玖 拾佰仟万亿、元角分、零、整
        //最多十六位整数,
        private string rmbTranslate(string num)
        {
            //num = "3010020000.00";
           // num = "3010020002.01";
           // num = "3000000002.01";
            string daxie = "零壹贰叁肆伍陆柒捌玖";
            string integerPart = "整";
            int decPointIndex = num.LastIndexOf('.');
            if (decPointIndex < 0)
                decPointIndex = num.Length;                        for (int i = 0; i < decPointIndex; i++)
            {                int temN = Convert.ToInt32(num[decPointIndex - 1 - i].ToString());
                string temp = daxie[temN].ToString();
                if (i == 0)
                {
                    if (temN == 0)
                        temp = "元";
                    else
                        temp += "元";
                }
                else if (i == 4 || i == 12)
                {
                    if (temN == 0)
                        temp = "万";
                    else
                        temp += "万";
                }                else if (i == 8)
                {
                    if (temN == 0)
                        temp = "亿";
                    else
                        temp += "亿";
                }                else
                {
                    int weishu = i % 4;
                    string unit="";
                    switch (weishu)
                    {
                        case 1:
                            unit = "拾";
                            break;
                        case 2:
                            unit = "佰";
                            break;                        case 3:
                            unit = "仟";
                            break;                    }
                    if (temN != 0)                       
                    temp = temp + unit;
                }                integerPart = temp + integerPart;
            }
            integerPart=integerPart.Replace("零零零", "零");
            integerPart=integerPart.Replace("零零", "零");
            integerPart = integerPart.Replace("万零亿", "万亿");
            integerPart = integerPart.Replace("亿零万", "亿");
            integerPart = integerPart.Replace("万零元", "万元");
            //30万亿
            integerPart = integerPart.Replace("亿零元", "亿元");
            integerPart = integerPart.Replace("佰零元", "佰元");
            integerPart = integerPart.Replace("仟零元", "仟元");
            integerPart = integerPart.Replace("佰零万", "佰万");
            integerPart = integerPart.Replace("仟零万", "仟万");
            integerPart = integerPart.Replace("佰零亿", "佰亿");
            integerPart = integerPart.Replace("仟零亿", "仟亿");
            rmbDaxie.Text = integerPart.ToString();
            return integerPart.ToString();
            //如果为整数,则添加整,否则不添加
        }

解决方案 »

  1.   

    有没有出错情况最好通过写桩模块测试。单元测试。走读代码当然也是检查bug的方式之一。
      

  2.   

    http://www.cnblogs.com/sashow/articles/580967.html
    这有个写好的例子,你参考一下
      

  3.   

    给你一个现成的,保存起来,用的时候调出来就行:
     /**/
            /// <summary> 
            /// 转换人民币大小金额 
            /// </summary> 
            /// <param name="num">金额</param> 
            /// <returns>返回大写形式</returns> 
            public static string CmycurD(decimal num)
            {
                string str1 = "零壹贰叁肆伍陆柒捌玖";            //0-9所对应的汉字 
                string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字 
                string str3 = "";    //从原num值中取出的值 
                string str4 = "";    //数字的字符串形式 
                string str5 = "";  //人民币大写金额形式 
                int i;    //循环变量 
                int j;    //num的值乘以100的字符串长度 
                string ch1 = "";    //数字的汉语读法 
                string ch2 = "";    //数字位的汉字读法 
                int nzero = 0;  //用来计算连续的零值是几个 
                int temp;            //从原num值中取出的值             num = Math.Round(Math.Abs(num), 2);    //将num取绝对值并四舍五入取2位小数 
                str4 = ((long)(num * 100)).ToString();        //将num乘100并转换成字符串形式 
                j = str4.Length;      //找出最高位 
                if (j > 15)
                {
                    return "溢出";
                }
                str2 = str2.Substring(15 - j);   //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分             //循环取出每一位需要转换的值 
                for (i = 0; i < j; i++)
                {
                    str3 = str4.Substring(i, 1);          //取出需转换的某一位的值 
                    temp = Convert.ToInt32(str3);      //转换为数字 
                    if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
                    {
                        //当所取位数不为元、万、亿、万亿上的数字时 
                        if (str3 == "0")
                        {
                            ch1 = "";
                            ch2 = "";
                            nzero = nzero + 1;
                        }
                        else
                        {
                            if (str3 != "0" && nzero != 0)
                            {
                                ch1 = "零" + str1.Substring(temp * 1, 1);
                                ch2 = str2.Substring(i, 1);
                                nzero = 0;
                            }
                            else
                            {
                                ch1 = str1.Substring(temp * 1, 1);
                                ch2 = str2.Substring(i, 1);
                                nzero = 0;
                            }
                        }
                    }
                    else
                    {
                        //该位是万亿,亿,万,元位等关键位 
                        if (str3 != "0" && nzero != 0)
                        {
                            ch1 = "零" + str1.Substring(temp * 1, 1);
                            ch2 = str2.Substring(i, 1);
                            nzero = 0;
                        }
                        else
                        {
                            if (str3 != "0" && nzero == 0)
                            {
                                ch1 = str1.Substring(temp * 1, 1);
                                ch2 = str2.Substring(i, 1);
                                nzero = 0;
                            }
                            else
                            {
                                if (str3 == "0" && nzero >= 3)
                                {
                                    ch1 = "";
                                    ch2 = "";
                                    nzero = nzero + 1;
                                }
                                else
                                {
                                    if (j >= 11)
                                    {
                                        ch1 = "";
                                        nzero = nzero + 1;
                                    }
                                    else
                                    {
                                        ch1 = "";
                                        ch2 = str2.Substring(i, 1);
                                        nzero = nzero + 1;
                                    }
                                }
                            }
                        }
                    }
                    if (i == (j - 11) || i == (j - 3))
                    {
                        //如果该位是亿位或元位,则必须写上 
                        ch2 = str2.Substring(i, 1);
                    }
                    str5 = str5 + ch1 + ch2;                if (i == j - 1 && str3 == "0")
                    {
                        //最后一位(分)为0时,加上“整” 
                        str5 = str5 + '整';
                    }
                }
                if (num == 0)
                {
                    str5 = "零元整";
                }
                return str5;
            }        /**/
            /// <summary> 
            /// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num) 
            /// </summary> 
            /// <param name="num">用户输入的金额,字符串形式未转成decimal</param> 
            /// <returns></returns> 
            public static string CmycurD(string numstr)
            {
                try
                {
                    decimal num = Convert.ToDecimal(numstr);
                    return CmycurD(num);
                }
                catch
                {
                    return "非数字形式!";
                }
            }
      

  4.   

    单元测试
    http://topic.csdn.net/u/20090714/19/463928cd-946b-4594-8e0c-39febe87eb13.html
      

  5.   


    //转换小写的金额至大写   
        public string AmountInCapitalCN(decimal amount)
        {
            if (amount == decimal.Parse("0.00"))
            {
                string capstr = "零";
                return capstr;
            }
            else
            {
                string capstr, capstr1 = "", capstr2 = "", x1, x2, x3, x4, x5;
                if (amount == 0) return "";
                x1 = amount.ToString("0.00");
                x2 = x1.Substring(0, x1.Length - 3);
                x3 = x1.Substring(x1.Length - 2);
                if (x3 == "00") capstr2 = "整";
                else
                {
                    capstr2 = DigitToCapitalCN(x3.Substring(1, 1), "分");
                    if (capstr2 == "零") capstr2 = "整";
                    capstr2 = DigitToCapitalCN(x3.Substring(0, 1), "角") + capstr2;
                }
                for (int i = 0; i < x2.Length; i++)
                {
                    switch (i)
                    {
                        case 0:
                            x5 = "";
                            break;
                        case 1:
                            x5 = "拾";
                            break;
                        case 2:
                            x5 = "佰";
                            break;
                        case 3:
                            x5 = "仟";
                            break;
                        case 4:
                            x5 = "万";
                            break;
                        case 5:
                            if (capstr1.IndexOf("万") == -1) x5 = "拾万"; else x5 = "拾";
                            break;
                        case 6:
                            if (capstr1.IndexOf("万") == -1) x5 = "佰万"; else x5 = "佰";
                            break;
                        case 7:
                            if (capstr1.IndexOf("万") == -1) x5 = "仟万"; else x5 = "仟";
                            break;
                        case 8:
                            x5 = "亿";
                            break;
                        case 9:
                            if (capstr1.IndexOf("亿") == -1) x5 = "拾亿"; else x5 = "拾";
                            break;
                        case 10:
                            if (capstr1.IndexOf("亿") == -1) x5 = "佰亿"; else x5 = "佰";
                            break;
                        case 11:
                            if (capstr1.IndexOf("亿") == -1) x5 = "仟亿"; else x5 = "仟";
                            break;
                        case 12:
                            if (capstr1.IndexOf("亿") == -1) x5 = "万亿"; else x5 = "万";
                            break;
                        default:
                            x5 = "金额溢出!";
                            break;
                    }
                    capstr1 = DigitToCapitalCN(x2.Substring(x2.Length - 1 - i, 1), x5) + capstr1;            }
                if ((capstr1.Substring(capstr1.Length - 1, 1) == "零") & (capstr2 != "整")) x4 = "元零"; else x4 = "元";
                capstr1 = RemoveDupeZero(capstr1);
                if (capstr1 == "") x4 = "";
                capstr = capstr1 + x4 + capstr2;
                capstr = RemoveDupeZero(capstr);
                //if (currency.Length > 0) x5 = currency.Trim(); else x5 = "";
                //switch (x5)
                //{
                //    case "CNY":
                //        x5 = "人民币";
                //        break;
                //    case "USD":
                //        x5 = "美元";
                //        break;
                //    case "EUR":
                //        x5 = "欧元";
                //        break;
                //    case "JPY":
                //        x5 = "日元";
                //        break;
                //    default:
                //        x5 = "";
                //        break;
                //}
                //return x5 + capstr;
                return capstr;
            }    }    private string DigitToCapitalCN(string digit, string cur)
        {
            string capdig;
            switch (digit)
            {
                case "0":
                    capdig = "零";
                    break;
                case "1":
                    capdig = "壹" + cur;
                    break;
                case "2":
                    capdig = "贰" + cur;
                    break;
                case "3":
                    capdig = "叁" + cur;
                    break;
                case "4":
                    capdig = "肆" + cur;
                    break;
                case "5":
                    capdig = "伍" + cur;
                    break;
                case "6":
                    capdig = "陆" + cur;
                    break;
                case "7":
                    capdig = "柒" + cur;
                    break;
                case "8":
                    capdig = "捌" + cur;
                    break;
                case "9":
                    capdig = "玖" + cur;
                    break;
                default:
                    capdig = "";
                    break;
            };
            return capdig;
        }
        private string RemoveDupeZero(string source)
        {
            string result = "";
            bool flag = false;
            foreach (char c in source)
            {
                if (c != '零')
                {
                    result += c;
                    flag = true;
                }
                else
                {
                    if (flag)
                    {
                        result += '零';
                        flag = false;
                    }
                }
            }
            return result.Trim('零');
        }
      

  6.   

    随手写了一个
    public static string GetChineseNum(decimal value)
    {
        string chinese = "零壹贰叁肆伍陆柒捌玖";
        string unit = "元十百千万十百千亿十百千兆十百千";
        string unit2 = "角分";
        StringBuilder builder = new StringBuilder();
        int u = 1;
        int i = 0;
        //整数
        while (value >= u)
        {
            int n = (int)value / u % 10;
            u *= 10;
            if (n == 0)
            {
                i++;
                continue;
            }
            builder.Insert(0, unit[i++]);
            builder.Insert(0, chinese[n]);
        }
        if (builder[builder.Length - 1] != '元')
        {
            builder.Append("元");
        }
        //小数
        if ((int)value != value)
        {
            int value2 = (int)((value - (int)value) * 100);
            int n = value2 / 10 % 10;
            builder.Append(chinese[n]);
            builder.Append(unit2[0]);
            n = value2 % 10;
            builder.Append(chinese[n]);
            builder.Append(unit2[1]);
        }
        else
        {
            builder.Append("整");
        }
        return builder.ToString();
    }