为了业务的需要无聊之极的写了一个输出中文数字的方法,效率上勉强过得去,如果你有什么更好的方法,跟贴吧。
1 2 /**//// <summary> 3 /// 中文计数 4 /// </summary> 5 /// <param name="num">[1 - 99999]</param> 6 /// <returns></returns> 7 public static string NumToChineseNumStr(int num) 8 { 9 if(num <= 0 || num > 99999) 10 throw new ArgumentException("num"); 11 string[] GradeChar = new string[]{"","十","百","千","万"}; 12 string[] DigitChar = new string[]{"一","二","三","四","五","六","七","八","九"}; 13 char zero = '零'; 14 15 int length = (int) Math.Log10(num) + 1; 16 StringBuilder output = new StringBuilder(length); 17 int[] input = new int[length]; 18 int index = -1; 19 while(++index != length) 20 { 21 input[index] = (num / (length - index == 1? 1 : (int)Math.Pow(10, length -index -1))) % 10; 22 } 23 24 bool needFix = false; 25 if(input.Length == 2 && input[0] == 1) 26 needFix = true; 27 28 for(int pos = 0; pos < input.Length; pos ++) 29 { 30 if(input[pos] == 0) 31 { 32 if(output[output.Length -1] != zero) 33 output.Append(zero); 34 continue; 35 } 36 else if(!(pos == 0 && needFix)) 37 { 38 output.Append(DigitChar[input[pos] -1]); 39 } 40 output.Append(GradeChar[input.Length - pos -1]); 41 } 42 if(output[output.Length - 1] == zero) 43 output.Remove(output.Length - 1, 1); 44 return output.ToString(); 45 } 46 |