欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-11 08:20:48
项目中经常会格式化数据,转换数字的使用情况比较多,记录一下数字转换的方法! 如果需要转换为繁体中文,将数组里的汉字换成繁体中文即可。 1.阿拉伯数字转换为中文数字 2.中文数字转换为阿拉伯数字 ......

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

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

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 }