如题!!

解决方案 »

  1.   

    又是我上次遇见的题目~
      呵呵~
     源码如下:请参考using System;namespace ExpertLib.ChineseSpecial
    {
         RMBException#region RMBException
         /**//// <summary>
         /// 人民币转换的错误
         /// </summary>
         public class RMBException : System.Exception
         {
             public RMBException(string msg)
                 : base(msg)
             {
             }
         }
         #endregion     /**//// <summary>
         /// 实现将人民币的数字形式转换为中文格式,最大支持9兆兆。
         /// </summary>
         public static class RMB
         {
             内部常量#region 内部常量
             private static string RMBUppercase = "零壹贰叁肆伍陆柒捌玖";
             private static string RMBUnitChar = "元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟万拾佰仟亿拾佰仟兆"; //人民币整数位对应的标志 
             private const decimal MaxNumber =9999999999999999999999999.99m;
             private const decimal MinNumber = -9999999999999999999999999.99m;
             private static char[] cDelim = { '.' }; //小数分隔标识
             #endregion         Convert#region Convert
             Convert #region Convert <decimal>
             /**//// <summary>
             /// 转换成人民币大写形式
             /// </summary>
             /// <param name="digital"></param>
             /// <returns></returns>
             public static string Convert(decimal number)
             {
                 bool NegativeFlag=false;
                 decimal RMBNumber;             CheckNumberLimit(number);             RMBNumber = Math.Round(number, 2);     //将四舍五入取2位小数
                 if (RMBNumber == 0) 
        { 
         return "零元整";
        } 
        else if(RMBNumber < 0)   //如果是负数
        {
         NegativeFlag = true;
                     RMBNumber = Math.Abs(RMBNumber);            //取绝对值
        }
        else
        {
                     NegativeFlag = false;
        }             string buf = "";                            // 存放返回结果 
                 string strDecPart = "";                     // 存放小数部分的处理结果 
                 string strIntPart = "";                     // 存放整数部分的处理结果 
                 string[] tmp = null;
                 string strDigital = RMBNumber.ToString();
                
                 tmp = strDigital.Split(cDelim, 2); // 将数据分为整数和小数部分             
                 if (RMBNumber >= 1m) // 大于1时才需要进行整数部分的转换
                 {
                     strIntPart = ConvertInt(tmp[0]);
                 }             if (tmp.Length > 1) //分解出了小数
                 {
                     strDecPart = ConvertDecimal(tmp[1]);
                 }
                 else   //没有小数肯定是为整
                 {
                     strDecPart = "整"; 
                 }
                
                 if (NegativeFlag==false) //是否负数
                 {
                     buf = strIntPart + strDecPart;
                 }
                 else
                 {
                     buf = "负"+strIntPart + strDecPart;
                 }
                 return buf;
             }
             #endregion         Convert #region Convert <double>
             /**//// <summary>
             /// 转换成人民币大写形式
             /// </summary>
             /// <param name="number"></param>
             /// <returns></returns>
             public static string Convert(double number)
             {
                 decimal dec;
                 try
                 {
                     dec = System.Convert.ToDecimal(number);
                 }
                 catch
                 {
                     throw new RMBException("不能转成标准的decimal类型:" + number.ToString());
                 }
                 return Convert(dec);
             }
             #endregion         Convert #region Convert <float>
             /**//// <summary>
             /// 转换成人民币大写形式
             /// </summary>
             /// <param name="number"></param>
             /// <returns></returns>
             public static string Convert(float number)
             {
                 decimal dec;
                 try
                 {
                     dec = System.Convert.ToDecimal(number);
                 }
                 catch
                 {
                     throw new RMBException("不能转成标准的decimal类型:" + number.ToString());
                 }
                 return Convert(dec);
             }
             #endregion         Convert #region Convert <int>
             /**//// <summary>
             /// 转换成人民币大写形式
             /// </summary>
             /// <param name="number"></param>
             /// <returns></returns>
             public static string Convert(int number)
             {
                 decimal dec;
                 dec = System.Convert.ToDecimal(number);
                 return Convert(dec);
             }
             #endregion         Convert #region Convert <long>
             /**//// <summary>
             /// 转换成人民币大写形式
             /// </summary>
             /// <param name="number"></param>
             /// <returns></returns>
             public static string Convert(long number)
             {
                 decimal dec;
                 dec = System.Convert.ToDecimal(number);
                 return Convert(dec);
             }
             #endregion         Convert #region Convert <string>
             /**//// <summary>
             /// 转换成人民币大写形式
             /// </summary>
             /// <param name="number"></param>
             /// <returns></returns>
             public static string Convert(string number)
             {
                 decimal dec;
                 try
                 {
                     dec = System.Convert.ToDecimal(number,null);
                 }
                 catch
                 {
                     throw new RMBException("不能转成标准的decimal类型:" + number);
                 }
                 return Convert(dec);
             }
             #endregion
             #endregion         MaxSupportNumber#region MaxSupportNumber
             /**//// <summary>
             /// 支持的最大转换数
             /// </summary>
             public static decimal MaxSupportNumber
             {
                 get
                 {
                     return MaxNumber;
                 }
             }
             #endregion         MinSupportNumber#region MinSupportNumber
             /**//// <summary>
             /// 支持的最小数
             /// </summary>
             public static decimal MinSupportNumber
             {
                 get
                 {
                     return MinNumber;
                 }
             }
             #endregion        
      

  2.   

     内部函数#region 内部函数
             ConvertInt#region ConvertInt
             private static string ConvertInt(string intPart)
             {
                 string buf = "";
                 int length = intPart.Length;
                 int curUnit = length;
        
                 // 处理除个位以上的数据 
                 string tmpValue = "";                     // 记录当前数值的中文形式 
                 string tmpUnit = "";                     // 记录当前数值对应的中文单位 
                 int i;
                 for (i = 0; i < length - 1; i++, curUnit--)
                 {
                     if (intPart[i] != '0')
                     {
                         tmpValue = DigToCC(intPart[i]);
                         tmpUnit = GetUnit(curUnit - 1);
                     }
                     else
                     {                    
                         // 如果当前的单位是"万、亿",则需要把它记录下来 
                         if ((curUnit - 1) % 4 == 0)
                         {
                             tmpValue = "";
                             tmpUnit = GetUnit(curUnit - 1);//
                            
                         }
                         else
                         {
                             tmpUnit = "";
                            
                             // 如果当前位是零,则需要判断它的下一位是否为零,再确定是否记录'零' 
                             if (intPart[i + 1] != '0')
                             {
                                
                                 tmpValue = "零";
                                
                             }
                             else
                             {
                                 tmpValue = "";
                             }
                         }
                     }
                     buf += tmpValue + tmpUnit;
                 }            
                 // 处理个位数据 
                 if (intPart[i] != '0')
                     buf += DigToCC(intPart[i]);
                 buf += "元";             return CombinUnit(buf);
             }
             #endregion         ConvertDecimal#region ConvertDecimal
             /**//// <summary>
             /// 小数部分的处理
             /// </summary>
             /// <param name="decPart">需要处理的小数部分</param>
             /// <returns></returns>
             private static string ConvertDecimal(string decPart)
             {
                 string buf = "";
                 int i = decPart.Length;             //如果小数点后均为零
                 if ((decPart == "0") || (decPart == "00"))
                 {
                     return "整";
                 }             if (decPart.Length > 1) //2位
                 {
                     if (decPart[0] == '0') //如果角位为零0.01
                     {
                         buf = DigToCC(decPart[1]) + "分"; //此时不可能分位为零
                     }
                     else if (decPart[1] == '0')
                     {
                         buf = DigToCC(decPart[0]) + "角整";
                     }
                     else
                     {
                         buf = DigToCC(decPart[0]) + "角";
                         buf += DigToCC(decPart[1]) + "分";
                     }
                 }
                 else //1位
                 {
                     buf += DigToCC(decPart[0]) + "角整";
                 }
                 return buf;
             }
             #endregion         GetUnit#region GetUnit
             /**//// <summary>
             /// 获取人民币中文形式的对应位置的单位标志
             /// </summary>
             /// <param name="n"></param>
             /// <returns></returns>
             private static string GetUnit(int n)
             {
                 return RMBUnitChar[n].ToString();
             }
             #endregion         DigToCC#region DigToCC
             /**//// <summary>
             /// 数字转换为相应的中文字符 ( Digital To Chinese Char )
             /// </summary>
             /// <param name="c">以字符形式存储的数字</param>
             /// <returns></returns>
             private static string DigToCC(char c)
             {
                 return RMBUppercase[c - '0'].ToString();
             }
             #endregion         CheckNumberLimit#region CheckNumberLimit
             private static void CheckNumberLimit(decimal number)
             {
                 if ((number < MinNumber) || (number > MaxNumber))
                 {
                     throw new RMBException("超出可转换的范围");
                 }
             }
             #endregion         CombinUnit#region CombinUnit
             /**//// <summary>
             /// 合并兆亿万词
             /// </summary>
             /// <param name="rmb"></param>
             /// <returns></returns>
             private static string CombinUnit(string rmb)
             {
                 if (rmb.Contains("兆亿万"))
                 {
                     return rmb.Replace("兆亿万", "兆");
                 }
                 if (rmb.Contains("亿万"))
                 {
                     return rmb.Replace("亿万", "亿");
                 }
                 if (rmb.Contains("兆亿"))
                 {
                     return rmb.Replace("兆亿", "兆");
                 }
                 return rmb;    
             }
             #endregion
             #endregion
         }
    }
      

  3.   

    经银行/财会 验证:
    http://www.cnblogs.com/esshs/archive/2005/03/30/128318.html
    是合会法的。(我常用这个,也用得很放心)
      

  4.   


    using System; 
     
    namespace Test 

        /**//// <summary> 
        /// Rmb 的摘要说明。 
        /// </summary> 
        public class Rmb 
        { 
            /**//// <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 "非数字形式!"; 
                } 
            } 
        } 

      

  5.   

       public static string DigitToChina(int digit)
            {
                string stringchn = "零壹贰叁肆伍陆柒捌玖";
                string stringnum = "0123456789";
                string[] stringArrayLevelName = new string[11] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰" };
                string ss = System.Convert.ToString(digit).Trim();
                string num = "";
                int i;
                for (i = ss.Length - 1; i >= 0; i--)
                {
                    if (ss[i] == '0')
                    {
                        if (ss.Length - 1 - i == 4)
                        {
                            num = "万" + num;
                        }
                        else
                        {
                            if (ss.Length - 1 - i == 8)
                            {
                                num = "亿" + num;
                            }
                            else
                            {
                                num = "零" + num;                        }
                        }
                    }
                    else
                    {
                        num = stringchn[stringnum.IndexOf(ss[i])] + stringArrayLevelName[ss.Length - 1 - i] + num;
                    }
                }
                while ((i = num.IndexOf("零零")) != -1)
                    num = num.Remove(i, 1);            while (num[num.Length - 1] == '零' && num.Length > 1)
                    num = num.Remove(num.Length - 1, 1);
                if ((i = num.IndexOf("零万")) != -1)
                    num = num.Remove(i, 1);
                if ((i = num.IndexOf("亿万")) != -1)
                    num = num.Remove(i + 1, 1);
                if ((i = num.IndexOf("零亿")) != -1)
                    num = num.Remove(i, 1);
                return num;        }