[原创] 用C#将数字转换为人民币大写
网上已经有一些数字转换为人民币大写的源码和控件,但还是自己动手写了一个。一是觉得好玩,二是希望能给需要的朋友提供一些方便:
1
public class XConvert
2
{
3
public static string ToRMB(Double e)
4
{
5
return ToRMB(System.Convert.ToDecimal(e));
6
}
7
8
public static string ToRMB(Decimal e)
9
{
10
string eString;//数字的格式化字符串
11
string eNum;//单数字
12
int eLen;//格式化字符串长度
13
14
System.Text.StringBuilder rmb=new System.Text.StringBuilder();//人民币大写
15
string yuan;//圆
16
bool seriesZero;//连续0标志
17
bool minus=false;//负数标志
18
19
if (e==0m)
20
{
21
return "零圆整";
22
}
23
if (e<0m)
24
{
25
minus=true;
26
e=System.Math.Abs(e);
27
}
28
if (e>999999999999.99m)
29
{
30
throw new Exception("超过最大范围");
31
}
32
33
eString=e.ToString("0.00");
34
eLen=eString.Length;
35
yuan=(eString.Substring(0,1)=="0"?"":"圆");
36
37
eNum=eString.Substring(eLen-1,1);//分位
38
if (eNum=="0")
39
{
40
rmb.Append("整");
41
seriesZero=true;
42
}
43
else
44
{
45
rmb.Append(stringNum(eNum)+"分");
46
seriesZero=false;
47
}
48
49
eNum=eString.Substring(eLen-2,1);//角位
50
if (eNum=="0")
51
{
52
if (!seriesZero)
53
{
54
if (!(eLen==4&&eString.Substring(0,1)=="0"))
55
{
56
rmb.Insert(0,"零");
57
}
58
}
59
}
60
else
61
{
62
rmb.Insert(0,stringNum(eNum)+"角");
63
seriesZero=false;
64
}
65
66
if (eLen<=7)
67
{
68
rmb.Insert(0,stringNum4(eString.Substring(0,eLen-3))+yuan);
69
}
70
else if (eLen<=11)
71
{
72
rmb.Insert(0,stringNum4(eString.Substring(eLen-7,4))+yuan);
73
rmb.Insert(0,stringNum4(eString.Substring(0,eLen-7))+"万");
74
}
75
else if (eLen<=15)
76
{
77
rmb.Insert(0,stringNum4(eString.Substring(eLen-7,4))+yuan);
78
rmb.Insert(0,stringNum4(eString.Substring(eLen-11,4))+(eString.Substring(eLen-11,4)=="0000"?"":"万"));
79
rmb.Insert(0,stringNum4(eString.Substring(0,eLen-11))+"亿");
80
}
81
82
if (minus) rmb.Insert(0,"负");
83
84
return rmb.ToString();
85
}
86
87
private static string stringNum4(string eNum4)
88
{
89
string eNum;
90
bool seriesZero=false;
91
System.Text.StringBuilder rmb4=new System.Text.StringBuilder();
92
int eLen=eNum4.Length;
93
94
eNum=eNum4.Substring(eLen-1,1);//个位
95
if (eNum=="0")
96
{
97
seriesZero=true;
98
}
99
else
100
{
101
rmb4.Append(stringNum(eNum));
102
}
103
104
if (eLen>=2)//十位
105
{
106
eNum=eNum4.Substring(eLen-2,1);
107
if (eNum=="0")
108
{
109
if (!seriesZero)
110
{
111
rmb4.Insert(0,"零");
112
seriesZero=true;
113
}
114
}
115
else
116
{
117
rmb4.Insert(0,stringNum(eNum)+"拾");
118
seriesZero=false;
119
}
120
}
121
122
if (eLen>=3)//百位
123
{
124
eNum=eNum4.Substring(eLen-3,1);
125
if(eNum=="0")
126
{
127
if (!seriesZero)
128
{
129
rmb4.Insert(0,"零");
130
seriesZero=true;
131
}
132
}
133
else
134
{
135
rmb4.Insert(0,stringNum(eNum)+"佰");
136
seriesZero=false;
137
}
138
}
139
140
if (eLen==4)//千位
141
{
142
eNum=eNum4.Substring(0,1);
143
if(eNum=="0")
144
{
145
if (!seriesZero)
146
{
147
rmb4.Insert(0,"零");
148
seriesZero=true;
149
}
150
}
151
else
152
{
153
rmb4.Insert(0,stringNum(eNum)+"仟");
154
seriesZero=false;
155
}
156
}
157
158
return rmb4.ToString();
159
}
160
161
private static string stringNum(string eNum)
162
{
163
switch (eNum)
164
{
165
case "1":
166
return "壹";
167
case "2":
168
return "贰";
169
case "3":
170
return "叁";
171
case "4":
172
return "肆";
173
case "5":
174
return "伍";
175
case "6":
176
return "陆";
177
case "7":
178
return "柒";
179
case "8":
180
return "捌";
181
case "9":
182
return "玖";
183
default:
184
return "";
185
}
186
}
187
}
不足之处,望朋友们指正。
public class XConvert2
{3
public static string ToRMB(Double e)4
{5
return ToRMB(System.Convert.ToDecimal(e));6
}7

8
public static string ToRMB(Decimal e)9
{10
string eString;//数字的格式化字符串11
string eNum;//单数字12
int eLen;//格式化字符串长度13

14
System.Text.StringBuilder rmb=new System.Text.StringBuilder();//人民币大写15
string yuan;//圆16
bool seriesZero;//连续0标志17
bool minus=false;//负数标志18

19
if (e==0m)20
{21
return "零圆整";22
}23
if (e<0m)24
{25
minus=true;26
e=System.Math.Abs(e); 27
}28
if (e>999999999999.99m)29
{30
throw new Exception("超过最大范围");31
}32

33
eString=e.ToString("0.00");34
eLen=eString.Length;35
yuan=(eString.Substring(0,1)=="0"?"":"圆");36

37
eNum=eString.Substring(eLen-1,1);//分位38
if (eNum=="0")39
{40
rmb.Append("整");41
seriesZero=true;42
}43
else44
{45
rmb.Append(stringNum(eNum)+"分");46
seriesZero=false;47
}48

49
eNum=eString.Substring(eLen-2,1);//角位50
if (eNum=="0")51
{52
if (!seriesZero)53
{54
if (!(eLen==4&&eString.Substring(0,1)=="0"))55
{56
rmb.Insert(0,"零");57
}58
}59
}60
else61
{62
rmb.Insert(0,stringNum(eNum)+"角"); 63
seriesZero=false;64
}65

66
if (eLen<=7)67
{68
rmb.Insert(0,stringNum4(eString.Substring(0,eLen-3))+yuan);69
}70
else if (eLen<=11)71
{72
rmb.Insert(0,stringNum4(eString.Substring(eLen-7,4))+yuan);73
rmb.Insert(0,stringNum4(eString.Substring(0,eLen-7))+"万");74
}75
else if (eLen<=15)76
{77
rmb.Insert(0,stringNum4(eString.Substring(eLen-7,4))+yuan);78
rmb.Insert(0,stringNum4(eString.Substring(eLen-11,4))+(eString.Substring(eLen-11,4)=="0000"?"":"万"));79
rmb.Insert(0,stringNum4(eString.Substring(0,eLen-11))+"亿");80
}81

82
if (minus) rmb.Insert(0,"负");83

84
return rmb.ToString();85
}86

87
private static string stringNum4(string eNum4)88
{89
string eNum;90
bool seriesZero=false;91
System.Text.StringBuilder rmb4=new System.Text.StringBuilder();92
int eLen=eNum4.Length;93

94
eNum=eNum4.Substring(eLen-1,1);//个位95
if (eNum=="0")96
{97
seriesZero=true;98
}99
else100
{101
rmb4.Append(stringNum(eNum));102
}103

104
if (eLen>=2)//十位105
{106
eNum=eNum4.Substring(eLen-2,1);107
if (eNum=="0")108
{109
if (!seriesZero)110
{111
rmb4.Insert(0,"零");112
seriesZero=true;113
}114
}115
else116
{117
rmb4.Insert(0,stringNum(eNum)+"拾");118
seriesZero=false;119
}120
}121

122
if (eLen>=3)//百位123
{124
eNum=eNum4.Substring(eLen-3,1);125
if(eNum=="0")126
{127
if (!seriesZero)128
{129
rmb4.Insert(0,"零");130
seriesZero=true;131
}132
}133
else134
{135
rmb4.Insert(0,stringNum(eNum)+"佰");136
seriesZero=false;137
}138
}139

140
if (eLen==4)//千位141
{142
eNum=eNum4.Substring(0,1);143
if(eNum=="0")144
{145
if (!seriesZero)146
{147
rmb4.Insert(0,"零");148
seriesZero=true;149
}150
}151
else152
{153
rmb4.Insert(0,stringNum(eNum)+"仟");154
seriesZero=false;155
}156
}157

158
return rmb4.ToString();159
}160

161
private static string stringNum(string eNum)162
{163
switch (eNum)164
{165
case "1":166
return "壹";167
case "2":168
return "贰";169
case "3":170
return "叁";171
case "4":172
return "肆";173
case "5":174
return "伍";175
case "6":176
return "陆";177
case "7":178
return "柒";179
case "8":180
return "捌";181
case "9":182
return "玖";183
default:184
return "";185
}186
}187
}

浙公网安备 33010602011771号