1: /// <summary>
2: /// Rmb 的摘要说明。
3: /// </summary>
4: public class Rmb
5: {
6: /// <summary>
7: /// 转换人民币大小金额
8: /// </summary>
9: /// <param name="num">金额</param>
10: /// <returns>返回大写形式</returns>
11: public static string CmycurD(decimal num)
12: {
13: string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字
14: string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字
15: string str3 = ""; //从原num值中取出的值
16: string str4 = ""; //数字的字符串形式
17: string str5 = ""; //人民币大写金额形式
18: int i; //循环变量
19: int j; //num的值乘以100的字符串长度
20: string ch1 = ""; //数字的汉语读法
21: string ch2 = ""; //数字位的汉字读法
22: int nzero = 0; //用来计算连续的零值是几个
23: int temp; //从原num值中取出的值
24:
25: num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数
26: str4 = ((long)(num * 100)).ToString(); //将num乘100并转换成字符串形式
27: j = str4.Length; //找出最高位
28: if (j > 15) { return "溢出"; }
29: str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
30:
31: //循环取出每一位需要转换的值
32: for (i = 0; i < j; i++)
33: {
34: str3 = str4.Substring(i, 1); //取出需转换的某一位的值
35: temp = Convert.ToInt32(str3); //转换为数字
36: if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
37: {
38: //当所取位数不为元、万、亿、万亿上的数字时
39: if (str3 == "0")
40: {
41: ch1 = "";
42: ch2 = "";
43: nzero = nzero + 1;
44: }
45: else
46: {
47: if (str3 != "0" && nzero != 0)
48: {
49: ch1 = "零" + str1.Substring(temp * 1, 1);
50: ch2 = str2.Substring(i, 1);
51: nzero = 0;
52: }
53: else
54: {
55: ch1 = str1.Substring(temp * 1, 1);
56: ch2 = str2.Substring(i, 1);
57: nzero = 0;
58: }
59: }
60: }
61: else
62: {
63: //该位是万亿,亿,万,元位等关键位
64: if (str3 != "0" && nzero != 0)
65: {
66: ch1 = "零" + str1.Substring(temp * 1, 1);
67: ch2 = str2.Substring(i, 1);
68: nzero = 0;
69: }
70: else
71: {
72: if (str3 != "0" && nzero == 0)
73: {
74: ch1 = str1.Substring(temp * 1, 1);
75: ch2 = str2.Substring(i, 1);
76: nzero = 0;
77: }
78: else
79: {
80: if (str3 == "0" && nzero >= 3)
81: {
82: ch1 = "";
83: ch2 = "";
84: nzero = nzero + 1;
85: }
86: else
87: {
88: if (j >= 11)
89: {
90: ch1 = "";
91: nzero = nzero + 1;
92: }
93: else
94: {
95: ch1 = "";
96: ch2 = str2.Substring(i, 1);
97: nzero = nzero + 1;
98: }
99: }
100: }
101: }
102: }
103: if (i == (j - 11) || i == (j - 3))
104: {
105: //如果该位是亿位或元位,则必须写上
106: ch2 = str2.Substring(i, 1);
107: }
108: str5 = str5 + ch1 + ch2;
109:
110: if (i == j - 1 && str3 == "0")
111: {
112: //最后一位(分)为0时,加上“整”
113: str5 = str5 + '整';
114: }
115: }
116: if (num == 0)
117: {
118: str5 = "零元整";
119: }
120: return str5;
121: }
122:
123: /**/
124: /// <summary>
125: /// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num)
126: /// </summary>
127: /// <param name="num">用户输入的金额,字符串形式未转成decimal</param>
128: /// <returns></returns>
129: public static string CmycurD(string numstr)
130: {
131: try
132: {
133: decimal num = Convert.ToDecimal(numstr);
134: return CmycurD(num);
135: }
136: catch
137: {
138: return "非数字形式!";
139: }
140: }
141: }