C# 阿拉伯數字轉換為中文數字/中文數字轉換為阿拉伯數字


項目中經常會格式化數據,轉換數字的使用情況比較多,記錄一下數字轉換的方法!

如果需要轉換為繁體中文,將數組里的漢字換成繁體中文即可。

1.阿拉伯數字轉換為中文數字

 1 /// <summary>
 2 /// 阿拉伯數字轉換成中文數字
 3 /// </summary>
 4 /// <param name="x"></param>
 5 /// <returns></returns>
 6 public string NumToChinese(string x)
 7 {
 8     string[] pArrayNum = { "", "", "", "", "", "", "", "", "", "" };
 9     //為數字位數建立一個位數組  
10     string[] pArrayDigit = { "", "", "", "" };
11     //為數字單位建立一個單位數組  
12     string[] pArrayUnits = { "", "", "", "萬億" };
13     var pStrReturnValue = ""; //返回值  
14     var finger = 0; //字符位置指針  
15     var pIntM = x.Length % 4; //取模  
16     int pIntK;
17     if (pIntM > 0)
18         pIntK = x.Length / 4 + 1;
19     else
20         pIntK = x.Length / 4;
21     //外層循環,四位一組,每組最后加上單位: ",萬億,",",億,",",萬,"  
22     for (var i = pIntK; i > 0; i--)
23     {
24         var pIntL = 4;
25         if (i == pIntK && pIntM != 0)
26             pIntL = pIntM;
27         //得到一組四位數  
28         var four = x.Substring(finger, pIntL);
29         var P_int_l = four.Length;
30         //內層循環在該組中的每一位數上循環  
31         for (int j = 0; j < P_int_l; j++)
32         {
33             //處理組中的每一位數加上所在的位  
34             int n = Convert.ToInt32(four.Substring(j, 1));
35             if (n == 0)
36             {
37                 if (j < P_int_l - 1 && Convert.ToInt32(four.Substring(j + 1, 1)) > 0 && !pStrReturnValue.EndsWith(pArrayNum[n]))
38                     pStrReturnValue += pArrayNum[n];
39             }
40             else
41             {
42                 if (!(n == 1 && (pStrReturnValue.EndsWith(pArrayNum[0]) | pStrReturnValue.Length == 0) && j == P_int_l - 2))
43                     pStrReturnValue += pArrayNum[n];
44                 pStrReturnValue += pArrayDigit[P_int_l - j - 1];
45             }
46         }
47         finger += pIntL;
48         //每組最后加上一個單位:",萬,",",億," 等  
49         if (i < pIntK) //如果不是最高位的一組  
50         {
51             if (Convert.ToInt32(four) != 0)
52                 //如果所有4位不全是0則加上單位",萬,",",億,"等  
53                 pStrReturnValue += pArrayUnits[i - 1];
54         }
55         else
56         {
57             //處理最高位的一組,最后必須加上單位  
58             pStrReturnValue += pArrayUnits[i - 1];
59         }
60     }
61     return pStrReturnValue;
62 }

 

2.中文數字轉換為阿拉伯數字

 

 1 /// <summary>
 2 /// 轉換數字
 3 /// </summary>
 4 protected static long CharToNumber(char c)
 5 {
 6     switch (c)
 7     {
 8         case '': return 1;
 9         case '': return 2;
10         case '': return 3;
11         case '': return 4;
12         case '': return 5;
13         case '': return 6;
14         case '': return 7;
15         case '': return 8;
16         case '': return 9;
17         case '': return 0;
18         default: return -1;
19     }
20 }
21 
22 /// <summary>
23 /// 轉換單位
24 /// </summary>
25 protected static long CharToUnit(char c)
26 {
27     switch (c)
28     {
29         case '': return 10;
30         case '': return 100;
31         case '': return 1000;
32         case '': return 10000;
33         case '': return 100000000;
34         default: return 1;
35     }
36 }
37 /// <summary>
38 /// 將中文數字轉換阿拉伯數字
39 /// </summary>
40 /// <param name="cnum">漢字數字</param>
41 /// <returns>長整型阿拉伯數字</returns>
42 public static long ParseCnToInt(string cnum)
43 {
44     cnum = Regex.Replace(cnum, "\\s+", "");
45     long firstUnit = 1;//一級單位                
46     long secondUnit = 1;//二級單位 
47     long result = 0;//結果
48     for (var i = cnum.Length - 1; i > -1; --i)//從低到高位依次處理
49     {
50         var tmpUnit = CharToUnit(cnum[i]);//臨時單位變量
51         if (tmpUnit > firstUnit)//判斷此位是數字還是單位
52         {
53             firstUnit = tmpUnit;//是的話就賦值,以備下次循環使用
54             secondUnit = 1;
55             if (i == 0)//處理如果是"十","十一"這樣的開頭的
56             {
57                 result += firstUnit * secondUnit;
58             }
59             continue;//結束本次循環
60         }
61         if (tmpUnit > secondUnit)
62         {
63             secondUnit = tmpUnit;
64             continue;
65         }
66         result += firstUnit * secondUnit * CharToNumber(cnum[i]);//如果是數字,則和單位想乘然后存到結果里
67     }
68     return result;
69 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM