金额阿拉伯数字转换为中文大写

 

最近的做项目中需要弄一个金额是阿拉伯数字转为中文大写的金额,自己偷懒了,就总结一下。

第一种方法相对复杂

private static readonly String cnNumber = "零壹贰叁肆伍陆柒捌玖";
private static readonly String cnUnit = "分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";

 

 1   public static String GetCnString(String MoneyString) //传入数字
 2         {
 3             String[] tmpString = MoneyString.Split('.');
 4             String intString = MoneyString;   // 默认为整数
 5             String decString = "";            // 保存小数部分字串
 6             String rmbCapital = "";            // 保存中文大写字串
 7             int k;
 8             int j;
 9             int n;
10 
11             if (tmpString.Length > 1)
12             {
13                 intString = tmpString[0];             // 取整数部分
14                 decString = tmpString[1];             // 取小数部分
15             }
16             decString += "00";
17             decString = decString.Substring(0, 2);   // 保留两位小数位
18             intString += decString;
19 
20             try
21             {
22                 k = intString.Length - 1;
23                 if (k > 0 && k < 18)
24                 {
25                     for (int i = 0; i <= k; i++)
26                     {
27                         j = (int)intString[i] - 48;
28                         // rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k-i];     // 供调试用的直接转换
29                         n = i + 1 >= k ? (int)intString[k] - 48 : (int)intString[i + 1] - 48; // 等效于 if( ){ }else{ }
30                         if (j == 0)
31                         {
32                             if (k - i == 2 || k - i == 6 || k - i == 10 || k - i == 14)
33                             {
34                                 rmbCapital += cnUnit[k - i];
35                             }
36                             else
37                             {
38                                 if (n != 0)
39                                 {
40                                     rmbCapital += cnNumber[j];
41                                 }
42                             }
43                         }
44                         else
45                         {
46                             rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k - i];
47                         }
48                     }
49 
50                     rmbCapital = rmbCapital.Replace("兆亿万", "");
51                     rmbCapital = rmbCapital.Replace("兆亿", "");
52                     rmbCapital = rmbCapital.Replace("亿万", "亿");
53                     rmbCapital = rmbCapital.TrimStart('');
54                     rmbCapital = rmbCapital.TrimStart('');
55 
56                     return rmbCapital;
57                 }
58                 else
59                 {
60                     return "";   // 超出转换范围时,返回零长字串
61                 }
62             }
63             catch
64             {
65                 return "";   // 含有非数值字符时,返回零长字串
66             }
67         }
68  
View Code

这里使用另一种方法,使用正则表达式,去匹配数字,这个看着比较简单,可以试试

 1        public string DaXie(string money)
 2         {
 3             try
 4             {
 5                 string s = double.Parse(money).ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
 6                 string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
 7                 return Regex.Replace(d, ".", delegate(Match m) { return "负圆空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万億兆京垓秭穰"[m.Value[0] - '-'].ToString(); });
 8             }
 9             catch (Exception ex)
10             {
11                 ClassAppLogs.WriteLogToLocalTextstatic(ex);
12                 return "";
13             }
14         }
正则表达式匹配

 

以下是去查到的,觉得不错,还是有点复杂

http://www.cnblogs.com/jsping/archive/2012/07/25/2607772.html

http://blog.csdn.net/lwjnumber/article/details/7037083

 

posted @ 2016-10-08 11:56  东辰潋(it猪)  阅读(424)  评论(0编辑  收藏  举报