金額阿拉伯數字轉換爲中文大寫

 

最近的作項目中須要弄一個金額是阿拉伯數字轉爲中文大寫的金額,本身偷懶了,就總結一下。html

第一種方法相對複雜正則表達式

private static readonly String cnNumber = "零壹貳叄肆伍陸柒捌玖";
private static readonly String cnUnit = "分角元拾佰仟萬拾佰仟億拾佰仟兆拾佰仟";api

 

 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

這裏使用另外一種方法,使用正則表達式,去匹配數字,這個看着比較簡單,能夠試試jsp

 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         }
正則表達式匹配

 

如下是去查到的,以爲不錯,仍是有點複雜ide

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

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

相關文章
相關標籤/搜索