java 数字转换人民币大写
代码
import java.text.DecimalFormat;
import java.util.Scanner;
public class 浮点数转人民币 {
public static final String ZERO = "零";
public static final String YUAN = "元";
public static final String WAN = "万";
public static final String YI = "亿";
public static final String ZHAO = "兆";
private static final String[] CN_UNIT = {"角", "分", "元",
"拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾",
"佰", "仟"};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入要转换的数字");
try {
processing(sc.nextDouble());
}catch(Exception e){
e.printStackTrace();
}
}
}
public static String[] doubleToString(double money) {
DecimalFormat df = new DecimalFormat("#.00");
String moneyS = df.format(money);
String[] split = moneyS.split("\\.");
System.out.println("整数部分:[" + split[0] + "]小数部分:[" + split[1] + "]");
return new String[]{split[0], split[1]};
}
public static StringBuilder handleDigit(String digit) {
int length = digit.length();
if (length > 15) {
throw new IllegalArgumentException("只支持15位数字");
}
char[] chars = digit.toCharArray();
StringBuilder resultDigit = new StringBuilder();
StringBuilder resultNum = new StringBuilder();
StringBuilder resultUnit = new StringBuilder();
for (char aChar : chars) {
String s = switchMach(aChar);
resultNum.append(s);
}
for (int i = resultNum.length(); i > 0; i--) {
resultUnit.append(CN_UNIT[i + 1]);
}
for (int i = 0; i < resultNum.length(); i++) {
char c = resultNum.charAt(i);
char c1 = resultUnit.charAt(i);
resultDigit.append(c).append((c1));
}
int index;
while ((index = resultDigit.indexOf("零仟")) != -1) {
resultDigit.replace(index, index + 2, ZERO);
}
while ((index = resultDigit.indexOf("零佰")) != -1) {
resultDigit.replace(index, index + 2, ZERO);
}
while ((index = resultDigit.indexOf("零拾")) != -1) {
resultDigit.replace(index, index + 2, ZERO);
}
while ((index = resultDigit.indexOf("零零")) != -1) {
resultDigit.replace(index, index + 2, ZERO);
}
while ((index = resultDigit.indexOf("零万")) != -1) {
resultDigit.replace(index, index + 2, WAN);
}
while ((index = resultDigit.indexOf("零亿")) != -1) {
resultDigit.replace(index, index + 2, YI);
}
while ((index = resultDigit.indexOf("零兆")) != -1) {
resultDigit.replace(index, index + 2, ZHAO);
}
while ((index = resultDigit.indexOf("亿万")) != -1) {
resultDigit.replace(index, index + 2, YI);
}
while ((index = resultDigit.indexOf("零元")) != -1) {
resultDigit.replace(index, index + 2, YUAN);
}
return resultDigit;
}
public static StringBuilder handleDecimal(String decimal) {
StringBuilder resultDecimal = new StringBuilder();
for (int i = 0; i < decimal.length(); i++) {
String switchMach = switchMach(decimal.charAt(i));
String res = switchMach + CN_UNIT[i];
resultDecimal.append(res);
}
return resultDecimal;
}
public static void processing(double num) {
String[] stringArr = doubleToString(num);
StringBuilder sbDigit = handleDigit(stringArr[0]);
StringBuilder sbDecimal = handleDecimal(stringArr[1]);
String result = String.valueOf(sbDigit) +
sbDecimal;
System.out.println("[" + num + "]" + "转换为大写的结果为:[" + result + "]");
System.out.println("----------------------------------------------------");
}
public static String switchMach(char m) {
switch (m) {
case '1':
return "壹";
case '2':
return "贰";
case '3':
return "叁";
case '4':
return "肆";
case '5':
return "伍";
case '6':
return "陆";
case '7':
return "柒";
case '8':
return "捌";
case '9':
return "玖";
case '0':
return "零";
default:
return "错误";
}
}
}
输出
请输入要转换的数字
123456.78
整数部分:[123456]小数部分:[78]
[123456.78]转换为大写的结果为:[壹拾贰万叁仟肆佰伍拾陆元柒角捌分]
----------------------------------------------------
请输入要转换的数字