为了业务的需要无聊之极的写了一个输出中文数字的方法,效率上勉强过得去,如果你有什么更好的方法,跟贴吧。
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
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



浙公网安备 33010602011771号