阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字

2022-10-17,,,

项目中经常会格式化数据,转换数字的使用情况比较多,记录一下数字转换的方法!

如果需要转换为繁体中文,将数组里的汉字换成繁体中文即可。

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 }

 

《阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字.doc》

下载本文的Word格式文档,以方便收藏与打印。