最近的作項目中須要弄一個金額是阿拉伯數字轉爲中文大寫的金額,本身偷懶了,就總結一下。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
這裏使用另外一種方法,使用正則表達式,去匹配數字,這個看着比較簡單,能夠試試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