C#,JAVA人民币小写转大写
在CSDN里看到的,先在这里copy到这里留作以后备用
1
View Code
2
1 package fendou.wyb.io;
2
3 public class MoneySmallToBig {
4
5 /**
6 * 人民币大小写转换
7 */
8 public static String[] number = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖" };
9 public static String[] units = new String[]{"元","拾","佰","仟"};
10 public static void change(String smoney){
11 StringBuffer sb=new StringBuffer();
12 //小数点的位置
13 int index=smoney.indexOf(".");
14
15 //biggerstr用于存放存有数字和单位的字符
16 StringBuffer biggerstr=new StringBuffer();
17
18 //处理小数部分
19 biggerstr.append("分");
20 biggerstr.append(number[Integer.parseInt(smoney.charAt(index+2)+"")]);
21 biggerstr.append("角");
22 biggerstr.append(number[Integer.parseInt(smoney.charAt(index+1)+"")]);
23
24 //处理整数部分
25 for(int i=0;i<index;i++){
26 sb.append(number[Integer.parseInt(smoney.charAt(i)+"")]);
27 }
28 sb=sb.reverse();
29 String insertstr=sb.toString();
30 for(int i=0;i<insertstr.length();i++){
31 //插入单位
32 if(i==0){
33 biggerstr.append("元");
34 }
35 else if((i+4)%4==0 && i!=8){
36 biggerstr.append("万");
37 }
38 else if(i%8==0){
39 biggerstr.append("亿");
40 }
41 else
42 biggerstr.append(units[i%4]);
43 //插入数字
44 biggerstr.append(insertstr.charAt(i));
45 }
46
47 //instead_zero字符串用于存放清除零之后的
48 String instead_zero=biggerstr.reverse().toString();
49 instead_zero=instead_zero.replaceAll("零分", "零");
50 instead_zero=instead_zero.replaceAll("零角", "零");
51 instead_zero=instead_zero.replaceAll("零佰", "零");
52 instead_zero=instead_zero.replaceAll("零仟", "零");
53 instead_zero=instead_zero.replaceAll("零拾", "零");
54 //把相连的零去掉
55 instead_zero=instead_zero.replaceAll("[零]+","零");
56 instead_zero=instead_zero.replaceAll("零元", "元");
57 instead_zero=instead_zero.replaceAll("零万", "万");
58 instead_zero=instead_zero.replaceAll("零亿", "亿");
59 //把字符串中的最后一个零去掉
60 if(instead_zero.charAt(instead_zero.length()-1)=='零'){
61 instead_zero=instead_zero.substring(0, instead_zero.length()-1);
62 }
63 System.out.println(instead_zero);
64 }
65 public static void main(String[] args) {
66 String smoney="1020089090.89";
67 change(smoney);
68 }
69 }
View Code
3
1 // <summary>
2 /// 金钱转换
3 /// </summary>
4 /// <param name="num"></param>
5 /// <returns></returns>
6 public static string ConvertToCn(decimal num)
7 {
8 string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字
9 string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字
10 string str3 = ""; //从原num值中取出的值
11 string str4 = ""; //数字的字符串形式
12 string str5 = ""; //人民币大写金额形式
13 int i; //循环变量
14 int j; //num的值乘以100的字符串长度
15 string ch1 = ""; //数字的汉语读法
16 string ch2 = ""; //数字位的汉字读法
17 int nzero = 0; //用来计算连续的零值是几个
18 int temp; //从原num值中取出的值
19
20 num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数
21 str4 = ((long)(num * 100)).ToString(); //将num乘100并转换成字符串形式
22 j = str4.Length; //找出最高位
23 if (j > 15) { return "溢出"; }
24 str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
25
26 //循环取出每一位需要转换的值
27 for (i = 0; i < j; i++)
28 {
29 str3 = str4.Substring(i, 1); //取出需转换的某一位的值
30 temp = Convert.ToInt32(str3); //转换为数字
31 if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
32 {
33 //当所取位数不为元、万、亿、万亿上的数字时
34 if (str3 == "0")
35 {
36 ch1 = "";
37 ch2 = "";
38 nzero = nzero + 1;
39 }
40 else
41 {
42 if (str3 != "0" && nzero != 0)
43 {
44 ch1 = "零" + str1.Substring(temp * 1, 1);
45 ch2 = str2.Substring(i, 1);
46 nzero = 0;
47 }
48 else
49 {
50 ch1 = str1.Substring(temp * 1, 1);
51 ch2 = str2.Substring(i, 1);
52 nzero = 0;
53 }
54 }
55 }
56 else
57 {
58 //该位是万亿,亿,万,元位等关键位
59 if (str3 != "0" && nzero != 0)
60 {
61 ch1 = "零" + str1.Substring(temp * 1, 1);
62 ch2 = str2.Substring(i, 1);
63 nzero = 0;
64 }
65 else
66 {
67 if (str3 != "0" && nzero == 0)
68 {
69 ch1 = str1.Substring(temp * 1, 1);
70 ch2 = str2.Substring(i, 1);
71 nzero = 0;
72 }
73 else
74 {
75 if (str3 == "0" && nzero >= 3)
76 {
77 ch1 = "";
78 ch2 = "";
79 nzero = nzero + 1;
80 }
81 else
82 {
83 if (j >= 11)
84 {
85 ch1 = "";
86 nzero = nzero + 1;
87 }
88 else
89 {
90 ch1 = "";
91 ch2 = str2.Substring(i, 1);
92 nzero = nzero + 1;
93 }
94 }
95 }
96 }
97 }
98 if (i == (j - 11) || i == (j - 3))
99 {
100 //如果该位是亿位或元位,则必须写上
101 ch2 = str2.Substring(i, 1);
102 }
103 str5 = str5 + ch1 + ch2;
104
105 if (i == j - 1 && str3 == "0")
106 {
107 //最后一位(分)为0时,加上“整”
108 str5 = str5;
109 }
110 }
111 if (num == 0)
112 {
113 str5 = "零元";
114 }
115 return str5;
116 }
class Program { private static string[] intStr = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; private static string[] numStr = new string[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; private static string[] moneyPattern = new string[] { "", "拾", "佰", "仟", "万", "亿" }; static void Main(string[] args) { string money = Console.ReadLine().ToString(); string str=BindMoney(money); Console.WriteLine(str); Console.ReadLine(); } public static string BindMoney(string money) { string str = ""; for (int i = 0; i < money.Length; i++) { for (int j = 0; j < intStr.Length; j++) { if (money.Substring(i,1).Equals(intStr[j])) { str += numStr[j]; } } } str = BindMoneyPattern(str); str = BindMoneyPattern2(str); return str; } private static string BindMoneyPattern(string str) { string moneyStr = ""; for (int i = 0; i < str.Length; i++) { if ((str.Length - i) % 4 == 0) { moneyStr += str[i] + moneyPattern[3]; } else if ((str.Length - i) % 4 == 2) { moneyStr += str[i] + moneyPattern[1]; } else if ((str.Length - i) % 4 == 3) { moneyStr += str[i] + moneyPattern[2]; } else if ((str.Length - i) % 5 == 0) { moneyStr += str[i] + moneyPattern[4]; } else if ((str.Length-i)%9==0) { moneyStr += str[i] + moneyPattern[5]; } else { moneyStr += str[i]; } } return moneyStr; } private static string BindMoneyPattern2(string str) { while (str.Contains("零拾")) { str=str.Replace("零拾","零"); } while (str.Contains("零佰")) { str = str.Replace("零佰", "零"); } while (str.Contains("零仟")) { str = str.Replace("零仟", "零"); } while (str.Contains("零万")) { str = str.Replace("零万","万"); } while (str.Contains("零亿")) { str = str.Replace("零亿", "亿"); } while (str.Contains("亿万")) { str = str.Replace("亿万", "亿"); } while (str.Contains("零零")) { str = str.Replace("零零", "零"); } while (str.IndexOf("零")==str.Length-1) { str = str.Replace("零",""); } return str; } }
4
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 //转换数字金额为人民币大写
6 namespace ConvertMoney
7 {
8 public class ConvertMoney
9 {
10 /// <summary>
11 /// 是否是浮点数 可带正负号
12 /// </summary>
13 /// <param name="inputData">输入字符串 </param>
14 /// <returns> </returns>
15 //public static bool IsDecimalSign(string inputData)
16 //{
17 // Regex RegDecimalSign = new Regex("^[+-]?[0-9]+[.]?[0-9]+$");
18 // Match m = RegDecimalSign.Match(inputData);
19 // return m.Success;
20 //}
21
22 static public string convertMoneytoRMB(decimal decMoney)
23 {
24 string strMoney,strOneNum,strTemp,strConverted;
25 int i,iLen;
26
27 //设初值
28 strConverted = "";
29 strMoney = decMoney.ToString();
30 iLen = strMoney.Length;
31
32 //先取小数位
33 if (strMoney.IndexOf(".") > 0)
34 {
35 strTemp = strMoney.Substring(strMoney.IndexOf(".") + 1, strMoney.Length - strMoney.IndexOf(".") - 1);
36 if (strTemp.Length > 2)
37 {
38 Console.WriteLine("错误:无法计算超过2位的小数");
39 return strConverted;
40 }
41 else if (strTemp == "0" || strTemp == "00" || strTemp == "")
42 strTemp = "";
43 else
44 {
45 if (strTemp.Length == 1 && strTemp != "0")
46 {
47 strConverted = converNumtoCapital(strTemp) + "角" + strConverted;
48 }
49 else
50 {
51 strOneNum = strTemp.Substring(0, 1);
52 strConverted = converNumtoCapital(strOneNum) + (strOneNum != "0" ? "角" : "") + strConverted;
53 strOneNum = strTemp.Substring(1, 1);
54 strConverted = strConverted + (strOneNum != "0" ? converNumtoCapital(strOneNum) + "分" : "");
55 }
56 }
57 }
58
59 //取整数部分
60 if (strMoney.IndexOf(".") < 0)
61 strTemp = strMoney;
62 else
63 strTemp = strMoney.Substring(0, strMoney.IndexOf("."));
64
65 iLen = strTemp.Length;
66 //Console.WriteLine(iLen);
67 Console.WriteLine(strTemp);
68
69 if (iLen > 0 && decimal.Parse(strTemp) != 0)
70 {
71 strConverted = "元" + strConverted;
72
73 for (i = 0; i < iLen; ++i)
74 {
75 strOneNum = strTemp.Substring(iLen - 1 - i, 1);
76 //if (strOneNum == "0")
77 //{
78 // //Console.WriteLine(strConverted.Substring(0, 1));
79 // if ((strConverted.Substring(0, 1) == "零" || strConverted.Substring(0, 1) == "元" || strConverted.Substring(0, 1) == "万" || strConverted.Substring(0, 1) == "亿") && !((i + 1) % 12 == 0 || (i + 1) == 5 || (i + 1) % 9 == 0))
80 // continue;
81 // else
82 // strConverted = converNumtoCapital(strOneNum) + strConverted;
83 //}
84
85 //Console.WriteLine((i + 1) % 4);
86
87 if ((i + 1) == 1)
88 {
89 strConverted = (strOneNum == "0" ? "" : converNumtoCapital(strOneNum)) + strConverted;
90 }
91 else if (((i + 1) % 4 == 2 || (i + 1) == 2) && i % 4 != 0 && i % 8 != 0)
92 {
93 if (strOneNum == "0")
94 {
95 if (strConverted.Substring(0, 1) == "零" || strConverted.Substring(0, 1) == "元" || strConverted.Substring(0, 1) == "万" || strConverted.Substring(0, 1) == "亿")
96 continue;
97 else
98 strConverted = "零" + strConverted;
99 }
100 else
101 strConverted = converNumtoCapital(strOneNum) + "拾" + strConverted;
102 }
103 else if (((i + 1) % 4 == 3 || (i + 1) == 3) && i % 4 != 0)
104 {
105 if (strOneNum == "0")
106 {
107 if (strConverted.Substring(0, 1) == "零" || strConverted.Substring(0, 1) == "元" || strConverted.Substring(0, 1) == "万" || strConverted.Substring(0, 1) == "亿")
108 continue;
109 else
110 strConverted = "零" + strConverted;
111 }
112 else
113 strConverted = converNumtoCapital(strOneNum) + "佰" + strConverted;
114 }
115 else if ((i + 1) % 4 == 0 && i % 4 != 0)
116 {
117 if (strOneNum == "0")
118 {
119 if (strConverted.Substring(0, 1) == "零" || strConverted.Substring(0, 1) == "元" || strConverted.Substring(0, 1) == "万" || strConverted.Substring(0, 1) == "亿")
120 continue;
121 else
122 strConverted = "零" + strConverted;
123 }
124 else
125 strConverted = converNumtoCapital(strOneNum) + "千" + strConverted;
126 }
127 else if (i % 4 == 0 && i % 8 != 0)
128 {
129 Console.WriteLine("万位{0}", i);
130 strConverted = (strOneNum == "0" ? "" : converNumtoCapital(strOneNum)) + "万" + strConverted;
131 }
132 else if (i % 8 == 0)
133 {
134 Console.WriteLine("亿位{0}", i);
135 if (strConverted.Substring(0, 1) == "万") strConverted = strConverted.Substring(1, strConverted.Length - 1);
136 strConverted = (strOneNum == "0" ? "" : converNumtoCapital(strOneNum)) + "亿" + strConverted;
137 }
138 else
139 {
140 Console.WriteLine(i);
141 strConverted = converNumtoCapital(strOneNum) + strConverted;
142 }
143 }
144 }
145
146 return strConverted;
147 }
148
149 static string converNumtoCapital(string strNum)
150 {
151 string strCapital = "";
152 switch (strNum)
153 {
154 case "0":
155 strCapital = "零";
156 break;
157 case "1":
158 strCapital = "壹";
159 break;
160 case "2":
161 strCapital = "贰";
162 break;
163 case "3":
164 strCapital = "叁";
165 break;
166 case "4":
167 strCapital = "肆";
168 break;
169 case "5":
170 strCapital = "伍";
171 break;
172 case "6":
173 strCapital = "陆";
174 break;
175 case "7":
176 strCapital = "柒";
177 break;
178 case "8":
179 strCapital = "捌";
180 break;
181 case "9":
182 strCapital = "玖";
183 break;
184 default:
185 strCapital = "";
186 break;
187 }
188 return strCapital;
189 }
190 }
191
192 class Program
193 {
194 static void Main(string[] args)
195 {
196 decimal i;
197 string s;
198 while (1 == 1)
199 {
200 Console.WriteLine("输入一个金额(直接回车退出):");
201 s = Console.ReadLine();
202 if (s == "") break;
203 //检查金额是否符合规则
204 try
205 {
206 i = decimal.Parse(s);
207 if (i < 0)
208 throw new Exception("不能是负数");
209 }
210 catch (Exception e)
211 {
212 Console.WriteLine(e.Message);
213 return;
214 }
215
216 /*
217 if (!(ConvertMoney.IsDecimalSign(s)))
218 Console.WriteLine("错误:不是金额!");
219 */
220
221 //i = Convert.ToDecimal(s);
222 s = ConvertMoney.convertMoneytoRMB(i);
223 Console.WriteLine("人民币大写金额为:{0}", s);
224 }
225 }
226 }
227 }