数字转中文方法(1)

  今天休假,闲来无事,写了一个转数字为中文的程序,暂时时没有处理小数部分,不过处理方法应该差不多。

思路:

  

x<1000此处分别对二种情况时进行了处理。0<x<100范围内的转换直接调用ConvertLessThanHundred方法

 

0<x<10直接从数组(中文数字)里取

 

 

10<x<100如果为10的倍数,则直接从数组(10的倍数)里找到对应数字的索引,否则分别取出个位与十位再进行合并。

 

 

100<x<999处理方法类似,调用ConvertLessThanHundred方法处理百分位的数字,对于中间有零(904)的数字要特殊处理。

 

 


 

 

x>=1000转换方法类似,对于千位以上的数字只不过是递归调用ConvertMoreThanThousand方法来,注意,我每次取四位才进行一次递归,因为每四位数字中间有一个跳位,如 万,亿。

 

 

 

 

代码
public class NumberToCurrency
    {
        
private string[] majorNames = { """""亿"};
        
private string[] tenDoubleNams = { """一十""二十""三十""四十""五十""六十""七十""八十""九十" };
        
private string[] tenNames = { """十一""十二""十三""十四""十五""十六""十七""十八""十九" };
        
private string[] numberNames = { """""""""""""""""""" };


        
/// <summary>
        
/// 转超过1000的数
        
/// </summary>
        
/// <param name="number"></param>
        
/// <returns></returns>
        public string ConvertMoreThanThousand(int number)
        {
            
//越界
            if (number < 999)
            {
                
throw new ArgumentException("number must be greater than 999");
            }
            
string result = string.Empty;
            
//处理千分位
            string strNumber = number.ToString();
            
            
int numLen = strNumber.Length;


            
int tempNumber = Convert.ToInt32(strNumber.Substring(numLen - 41));   //取千位
            int lessThousand = Convert.ToInt32(strNumber.Substring(numLen - 3));    //千位之后所有位
            result = numberNames[tempNumber] + "";
            
if(lessThousand == 0)
            {
                
//后面全为0
            }
            
else if(lessThousand<999)   //二位数,要补零
            {
                result 
+= "" + ConvertLessThanThousand(lessThousand);
            }
            
else
            {
                result 
+= ConvertLessThanThousand(lessThousand);
            }
            
            
//千分位之上的数字,每4位作为一段进行处理
            strNumber = strNumber.Remove(numLen - 4);
            numLen 
= strNumber.Length;  //重新计算长度
            int index = 1;
            
string tempCalculate = string.Empty;
            
while (numLen > 0 && index<majorNames.Length)
            {

                tempCalculate 
= strNumber.Substring((numLen - 4> 0 ? numLen - 4 : 0); //最后4位;
                if (Convert.ToInt32(tempCalculate) < 1000)
                {
                    tempCalculate 
= ConvertLessThanThousand(Convert.ToInt32(tempCalculate));
                }
                
else
                {
                    tempCalculate 
= ConvertMoreThanThousand(Convert.ToInt32(tempCalculate));
                }
                result 
= tempCalculate + majorNames[index] + result;
                strNumber 
= strNumber.Remove((numLen - 4> 0 ? numLen - 4 : 0);
                numLen 
= strNumber.Length;
                index
++;
            }
            
            
return result;
        }

        
/// <summary>
        
/// 转小于1000 (0-999) 的数
        
/// </summary>
        
/// <param name="number"></param>
        
/// <returns></returns>
        public string ConvertLessThanThousand(int number)
        {
            
//越界
            if (number < 0 || number > 999)
            {
                
throw new ArgumentException("number must between 0 and 999");
            }
            
string result = string.Empty;

            
if (number < 100)
            {
                
return ConvertLessThanHundred(number);
            }
            
else     //大于100 (100-999)
            {
                
int tempNumber = number / 100;  //取百位
                result = numberNames[tempNumber] + "";
                tempNumber 
= number - tempNumber * 100//取个位与十位

                
if (tempNumber == 0)    //tempNumber==0则就被整除
                {
                    
//do nothing
                }
                
else if (tempNumber < 10)    //存在零
                {
                    result 
+= "" + ConvertLessThanHundred(tempNumber);
                }
                
else
                {
                    result 
+= ConvertLessThanHundred(tempNumber);
                }
            }
            
            
return result;
        }


        
/// <summary>
        
/// 转小于100 (0-99) 的数
        
/// </summary>
        
/// <param name="number"></param>
        
/// <returns></returns>
        public  string ConvertLessThanHundred(int number)
        {
            
//越界
            if (number < 0 || number > 99)
            {
                
throw new ArgumentException("number must between 0 and 99");
            }
            
            
string result = string.Empty;   //存储返回结果
            
//0-10之间
            if (number < 10)
            {
                result 
= numberNames[number];
            }
            
else    //10-99
            {
                
if (number % 10 == 0)   //10的倍数
                {
                    result 
= tenDoubleNams[number / 10];
                }
                
else     //非10的倍数
                {
                    result 
= tenDoubleNams[number / 10+ numberNames[number % 10]; //分别从十的倍数和数字数组中取
                }
            }

            
return result;
        }

    }

吃饭去了..........

posted @ 2010-07-27 19:57  Repository  阅读(691)  评论(0编辑  收藏  举报