1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
5
namespace wpTools
6
{
7
public class TransformDigitMoneyToChineseMoney
8
{
9
/// <summary>
10
/// 转换数字金额为中文大写金额。(包括小数)
11
/// </summary>
12
/// <param name="str">数字金额字符串</param>
13
/// <returns>转换成中文大写后的字符串或者出错信息提示字符串</returns>
14
public string ConvertToChineseMoney(string str)
15
{
16
str=str.Trim(); //清除首尾空格。
17
if (!this.IsPositveDecimal(str)||(str[0]=='0'&&str[1]!='.'))
18
{
19
return "您输入的不是有效的数字金额!";
20
}
21
double digMoney=double.Parse(str);
22
if (digMoney> 999999999999.99)
23
{
24
return "数字金额太大,无法换算,请输入一万亿元以下的金额!";
25
}
26
//else if (digMoney < 0.01)
27
//{
28
// return "数字金额太小,无法换算,请输入一分钱(0.01)以上的金额!";
29
//}
30
//char[] ch = new char[1];
31
//ch[0] = '.'; //小数点
32
string[] splitstr = null; //定义按小数点分割后的字符串数组
33
splitstr = str.Split('.');//按小数点分割字符串
34
if (splitstr.Length == 2)
35
{
36
string dotLeftStr=splitstr[0].Trim();
37
string dotRightStr = splitstr[1].Trim();
38
int i= 0;
39
for (; i < dotRightStr.Length; ++i)
40
{
41
if (dotRightStr[i] != '0')
42
{
43
break;
44
}
45
}
46
if (i > 1 || (i == dotRightStr.Length && 1 == dotRightStr.Length)) //小数部分前两个有效位全部为0,忽略。
47
{
48
return ConvertData(dotLeftStr) + "圆整";
49
}
50
else //有小数部分
51
{
52
string rstr;
53
if (dotLeftStr[0] == '0' && dotLeftStr.Length == 1)
54
{
55
rstr = ConvertXiaoShu(dotRightStr);//只转换小数部分
56
}
57
else
58
{
59
rstr = ConvertData(dotLeftStr) + "圆";//转换整数部分
60
rstr += ConvertXiaoShu(dotRightStr);//转换小数部分
61
}
62
return rstr;
63
}
64
}
65
else //只有整数部分
66
{
67
return ConvertData(str) + "圆整";
68
}
69
}
70
/// <summary>
71
/// 判断是否是正数字字符串
72
/// </summary>
73
/// <param name="str">待判断字符串</param>
74
/// <returns>如果是数字,返回true,否则返回false </returns>
75
private bool IsPositveDecimal(string str)
76
{
77
double d;
78
try
79
{
80
d = double.Parse(str);
81
}
82
catch
83
{
84
return false;
85
}
86
if (d >= 0.01)
87
{
88
return true;
89
}
90
else
91
{
92
return false;
93
}
94
}
95
/// <summary>
96
/// 转换数字(整数)
97
/// </summary>
98
/// <param name="str">需要转换的整数数字字符串 </param>
99
/// <returns>转换成中文大写后的字符串</returns>
100
private string ConvertData(string str)
101
{
102
string tmpstr = "";
103
string rstr = "";
104
int strlen = str.Length;
105
if (strlen <= 4)//数字长度小于四位
106
{
107
rstr = ConvertDigit(str);
108
}
109
else
110
{
111
if (strlen <= 8)//数字长度大于四位,小于八位
112
{
113
tmpstr = str.Substring(strlen - 4, 4);//先截取最后四位数字
114
rstr = ConvertDigit(tmpstr);//转换最后四位数字
115
tmpstr = str.Substring(0, strlen - 4);//截取其余数字
116
//将两次转换的数字加上萬后相连接
117
rstr = String.Concat(ConvertDigit(tmpstr) + "萬", rstr);
118
rstr = rstr.Replace("零萬", "萬");
119
rstr = rstr.Replace("零零", "零");
120
121
}
122
else if (strlen <= 12)//数字长度大于八位,小于十二位
123
{
124
tmpstr = str.Substring(strlen - 4, 4);//先截取最后四位数字
125
rstr = ConvertDigit(tmpstr);//转换最后四位数字
126
tmpstr = str.Substring(strlen - 8, 4);//再截取四位数字
127
rstr = String.Concat(ConvertDigit(tmpstr) + "萬", rstr);
128
tmpstr = str.Substring(0, strlen - 8);
129
rstr = String.Concat(ConvertDigit(tmpstr) + "億", rstr);
130
rstr = rstr.Replace("零億", "億");
131
rstr = rstr.Replace("零萬", "零");
132
rstr = rstr.Replace("零零", "零");
133
rstr = rstr.Replace("零零", "零");
134
}
135
}
136
strlen = rstr.Length;
137
if (strlen >= 2)
138
{
139
switch (rstr.Substring(strlen - 2, 2))
140
{
141
case "佰零": rstr = rstr.Substring(0, strlen - 2) + "佰"; break;
142
case "仟零": rstr = rstr.Substring(0, strlen - 2) + "仟"; break;
143
case "萬零": rstr = rstr.Substring(0, strlen - 2) + "萬"; break;
144
case "億零": rstr = rstr.Substring(0, strlen - 2) + "億"; break;
145
146
}
147
}
148
return rstr;
149
}
150
/// <summary>
151
/// 转换数字(小数部分)
152
/// </summary>
153
/// <param name="str">需要转换的小数部分数字字符串</param>
154
/// <returns>转换成中文大写后的字符串</returns>
155
private string ConvertXiaoShu(string str)
156
{
157
int strlen = str.Length;
158
string rstr;
159
if (strlen == 1)
160
{
161
rstr = ConvertChinese(str) + "角";
162
return rstr;
163
}
164
else
165
{
166
string tmpstr = str.Substring(0, 1);
167
rstr = ConvertChinese(tmpstr) + "角";
168
tmpstr = str.Substring(1, 1);
169
rstr += ConvertChinese(tmpstr) + "分";
170
rstr = rstr.Replace("零分", "");
171
rstr = rstr.Replace("零角", "");
172
return rstr;
173
}
174
}
175
/// <summary>
176
/// 转换数字
177
/// </summary>
178
/// <param name="str">转换的字符串(四位以内)</param>
179
/// <returns></returns>
180
private string ConvertDigit(string str)
181
{
182
int strlen = str.Length;
183
string rstr = "";
184
switch (strlen)
185
{
186
case 1: rstr = ConvertChinese(str); break;
187
case 2: rstr = Convert2Digit(str); break;
188
case 3: rstr = Convert3Digit(str); break;
189
case 4: rstr = Convert4Digit(str); break;
190
}
191
rstr = rstr.Replace("拾零", "拾");
192
strlen = rstr.Length;
193
194
return rstr;
195
}
196
/// <summary>
197
/// 转换四位数字
198
/// </summary>
199
/// <param name="str"></param>
200
/// <returns></returns>
201
private string Convert4Digit(string str)
202
{
203
string str1 = str.Substring(0, 1);
204
string str2 = str.Substring(1, 1);
205
string str3 = str.Substring(2, 1);
206
string str4 = str.Substring(3, 1);
207
string rstring = "";
208
rstring += ConvertChinese(str1) + "仟";
209
rstring += ConvertChinese(str2) + "佰";
210
rstring += ConvertChinese(str3) + "拾";
211
rstring += ConvertChinese(str4);
212
rstring = rstring.Replace("零仟", "零");
213
rstring = rstring.Replace("零佰", "零");
214
rstring = rstring.Replace("零拾", "零");
215
rstring = rstring.Replace("零零", "零");
216
rstring = rstring.Replace("零零", "零");
217
rstring = rstring.Replace("零零", "零");
218
return rstring;
219
}
220
/// <summary>
221
/// 转换三位数字
222
/// </summary>
223
/// <param name="str"></param>
224
/// <returns></returns>
225
private string Convert3Digit(string str)
226
{
227
string str1 = str.Substring(0, 1);
228
string str2 = str.Substring(1, 1);
229
string str3 = str.Substring(2, 1);
230
string rstring = "";
231
rstring += ConvertChinese(str1) + "佰";
232
rstring += ConvertChinese(str2) + "拾";
233
rstring += ConvertChinese(str3);
234
rstring = rstring.Replace("零佰", "零");
235
rstring = rstring.Replace("零拾", "零");
236
rstring = rstring.Replace("零零", "零");
237
rstring = rstring.Replace("零零", "零");
238
return rstring;
239
}
240
/// <summary>
241
/// 转换二位数字
242
/// </summary>
243
/// <param name="str"></param>
244
/// <returns></returns>
245
private string Convert2Digit(string str)
246
{
247
string str1 = str.Substring(0, 1);
248
string str2 = str.Substring(1, 1);
249
string rstring = "";
250
rstring += ConvertChinese(str1) + "拾";
251
rstring += ConvertChinese(str2);
252
rstring = rstring.Replace("零拾", "零");
253
rstring = rstring.Replace("零零", "零");
254
return rstring;
255
}
256
/// <summary>
257
/// 将一位数字转换成中文大写数字
258
/// </summary>
259
/// <param name="str"></param>
260
/// <returns></returns>
261
private string ConvertChinese(string str)
262
{
263
//"零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分"
264
string cstr = "";
265
switch (str)
266
{
267
case "0": cstr = "零"; break;
268
case "1": cstr = "壹"; break;
269
case "2": cstr = "贰"; break;
270
case "3": cstr = "叁"; break;
271
case "4": cstr = "肆"; break;
272
case "5": cstr = "伍"; break;
273
case "6": cstr = "陆"; break;
274
case "7": cstr = "柒"; break;
275
case "8": cstr = "捌"; break;
276
case "9": cstr = "玖"; break;
277
}
278
return (cstr);
279
}
280
}
281
}
using System;2
using System.Collections.Generic;3
using System.Text;4

5
namespace wpTools6
{7
public class TransformDigitMoneyToChineseMoney8
{9
/// <summary>10
/// 转换数字金额为中文大写金额。(包括小数) 11
/// </summary>12
/// <param name="str">数字金额字符串</param>13
/// <returns>转换成中文大写后的字符串或者出错信息提示字符串</returns> 14
public string ConvertToChineseMoney(string str)15
{16
str=str.Trim(); //清除首尾空格。17
if (!this.IsPositveDecimal(str)||(str[0]=='0'&&str[1]!='.'))18
{19
return "您输入的不是有效的数字金额!";20
}21
double digMoney=double.Parse(str);22
if (digMoney> 999999999999.99)23
{24
return "数字金额太大,无法换算,请输入一万亿元以下的金额!";25
}26
//else if (digMoney < 0.01)27
//{28
// return "数字金额太小,无法换算,请输入一分钱(0.01)以上的金额!";29
//}30
//char[] ch = new char[1];31
//ch[0] = '.'; //小数点 32
string[] splitstr = null; //定义按小数点分割后的字符串数组 33
splitstr = str.Split('.');//按小数点分割字符串 34
if (splitstr.Length == 2)35
{36
string dotLeftStr=splitstr[0].Trim();37
string dotRightStr = splitstr[1].Trim();38
int i= 0;39
for (; i < dotRightStr.Length; ++i)40
{41
if (dotRightStr[i] != '0')42
{43
break;44
}45
}46
if (i > 1 || (i == dotRightStr.Length && 1 == dotRightStr.Length)) //小数部分前两个有效位全部为0,忽略。47
{48
return ConvertData(dotLeftStr) + "圆整";49
}50
else //有小数部分51
{52
string rstr;53
if (dotLeftStr[0] == '0' && dotLeftStr.Length == 1)54
{55
rstr = ConvertXiaoShu(dotRightStr);//只转换小数部分 56
}57
else58
{59
rstr = ConvertData(dotLeftStr) + "圆";//转换整数部分 60
rstr += ConvertXiaoShu(dotRightStr);//转换小数部分 61
}62
return rstr;63
}64
}65
else //只有整数部分 66
{67
return ConvertData(str) + "圆整";68
}69
} 70
/// <summary>71
/// 判断是否是正数字字符串72
/// </summary>73
/// <param name="str">待判断字符串</param>74
/// <returns>如果是数字,返回true,否则返回false </returns>75
private bool IsPositveDecimal(string str)76
{77
double d;78
try79
{80
d = double.Parse(str);81
}82
catch83
{84
return false;85
}86
if (d >= 0.01)87
{88
return true;89
}90
else91
{92
return false;93
}94
}95
/// <summary>96
/// 转换数字(整数)97
/// </summary>98
/// <param name="str">需要转换的整数数字字符串 </param>99
/// <returns>转换成中文大写后的字符串</returns>100
private string ConvertData(string str)101
{102
string tmpstr = "";103
string rstr = "";104
int strlen = str.Length;105
if (strlen <= 4)//数字长度小于四位 106
{107
rstr = ConvertDigit(str);108
}109
else110
{111
if (strlen <= 8)//数字长度大于四位,小于八位 112
{113
tmpstr = str.Substring(strlen - 4, 4);//先截取最后四位数字 114
rstr = ConvertDigit(tmpstr);//转换最后四位数字 115
tmpstr = str.Substring(0, strlen - 4);//截取其余数字 116
//将两次转换的数字加上萬后相连接 117
rstr = String.Concat(ConvertDigit(tmpstr) + "萬", rstr);118
rstr = rstr.Replace("零萬", "萬");119
rstr = rstr.Replace("零零", "零");120

121
}122
else if (strlen <= 12)//数字长度大于八位,小于十二位 123
{124
tmpstr = str.Substring(strlen - 4, 4);//先截取最后四位数字 125
rstr = ConvertDigit(tmpstr);//转换最后四位数字 126
tmpstr = str.Substring(strlen - 8, 4);//再截取四位数字 127
rstr = String.Concat(ConvertDigit(tmpstr) + "萬", rstr);128
tmpstr = str.Substring(0, strlen - 8);129
rstr = String.Concat(ConvertDigit(tmpstr) + "億", rstr);130
rstr = rstr.Replace("零億", "億");131
rstr = rstr.Replace("零萬", "零");132
rstr = rstr.Replace("零零", "零");133
rstr = rstr.Replace("零零", "零");134
}135
}136
strlen = rstr.Length;137
if (strlen >= 2)138
{139
switch (rstr.Substring(strlen - 2, 2))140
{141
case "佰零": rstr = rstr.Substring(0, strlen - 2) + "佰"; break;142
case "仟零": rstr = rstr.Substring(0, strlen - 2) + "仟"; break;143
case "萬零": rstr = rstr.Substring(0, strlen - 2) + "萬"; break;144
case "億零": rstr = rstr.Substring(0, strlen - 2) + "億"; break;145

146
}147
}148
return rstr;149
}150
/// <summary>151
/// 转换数字(小数部分)152
/// </summary>153
/// <param name="str">需要转换的小数部分数字字符串</param>154
/// <returns>转换成中文大写后的字符串</returns>155
private string ConvertXiaoShu(string str)156
{157
int strlen = str.Length;158
string rstr;159
if (strlen == 1)160
{161
rstr = ConvertChinese(str) + "角";162
return rstr;163
}164
else165
{166
string tmpstr = str.Substring(0, 1);167
rstr = ConvertChinese(tmpstr) + "角";168
tmpstr = str.Substring(1, 1);169
rstr += ConvertChinese(tmpstr) + "分";170
rstr = rstr.Replace("零分", "");171
rstr = rstr.Replace("零角", "");172
return rstr;173
}174
}175
/// <summary>176
/// 转换数字177
/// </summary>178
/// <param name="str">转换的字符串(四位以内)</param>179
/// <returns></returns> 180
private string ConvertDigit(string str)181
{182
int strlen = str.Length;183
string rstr = "";184
switch (strlen)185
{186
case 1: rstr = ConvertChinese(str); break;187
case 2: rstr = Convert2Digit(str); break;188
case 3: rstr = Convert3Digit(str); break;189
case 4: rstr = Convert4Digit(str); break;190
}191
rstr = rstr.Replace("拾零", "拾");192
strlen = rstr.Length;193

194
return rstr;195
}196
/// <summary>197
/// 转换四位数字198
/// </summary>199
/// <param name="str"></param>200
/// <returns></returns>201
private string Convert4Digit(string str)202
{203
string str1 = str.Substring(0, 1);204
string str2 = str.Substring(1, 1);205
string str3 = str.Substring(2, 1);206
string str4 = str.Substring(3, 1);207
string rstring = "";208
rstring += ConvertChinese(str1) + "仟";209
rstring += ConvertChinese(str2) + "佰";210
rstring += ConvertChinese(str3) + "拾";211
rstring += ConvertChinese(str4);212
rstring = rstring.Replace("零仟", "零");213
rstring = rstring.Replace("零佰", "零");214
rstring = rstring.Replace("零拾", "零");215
rstring = rstring.Replace("零零", "零");216
rstring = rstring.Replace("零零", "零");217
rstring = rstring.Replace("零零", "零");218
return rstring;219
}220
/// <summary>221
/// 转换三位数字222
/// </summary>223
/// <param name="str"></param>224
/// <returns></returns>225
private string Convert3Digit(string str)226
{227
string str1 = str.Substring(0, 1);228
string str2 = str.Substring(1, 1);229
string str3 = str.Substring(2, 1);230
string rstring = "";231
rstring += ConvertChinese(str1) + "佰";232
rstring += ConvertChinese(str2) + "拾";233
rstring += ConvertChinese(str3);234
rstring = rstring.Replace("零佰", "零");235
rstring = rstring.Replace("零拾", "零");236
rstring = rstring.Replace("零零", "零");237
rstring = rstring.Replace("零零", "零");238
return rstring;239
}240
/// <summary>241
/// 转换二位数字 242
/// </summary>243
/// <param name="str"></param>244
/// <returns></returns>245
private string Convert2Digit(string str)246
{247
string str1 = str.Substring(0, 1);248
string str2 = str.Substring(1, 1);249
string rstring = "";250
rstring += ConvertChinese(str1) + "拾";251
rstring += ConvertChinese(str2);252
rstring = rstring.Replace("零拾", "零");253
rstring = rstring.Replace("零零", "零");254
return rstring;255
}256
/// <summary>257
/// 将一位数字转换成中文大写数字 258
/// </summary>259
/// <param name="str"></param>260
/// <returns></returns> 261
private string ConvertChinese(string str)262
{263
//"零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分" 264
string cstr = "";265
switch (str)266
{267
case "0": cstr = "零"; break;268
case "1": cstr = "壹"; break;269
case "2": cstr = "贰"; break;270
case "3": cstr = "叁"; break;271
case "4": cstr = "肆"; break;272
case "5": cstr = "伍"; break;273
case "6": cstr = "陆"; break;274
case "7": cstr = "柒"; break;275
case "8": cstr = "捌"; break;276
case "9": cstr = "玖"; break;277
}278
return (cstr);279
}280
}281
}


浙公网安备 33010602011771号