首页 > 代码库 > 金额阿拉伯数字转换为中文大写

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

 

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

第一种方法相对复杂

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             try21             {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                             else37                             {38                                 if (n != 0)39                                 {40                                     rmbCapital += cnNumber[j];41                                 }42                             }43                         }44                         else45                         {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                 else59                 {60                     return "";   // 超出转换范围时,返回零长字串61                 }62             }63             catch64             {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

 

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