import java.io.BufferedReader;
import java.io.InputStreamReader;
public class UpperCaseMoney {
private static int n = 0;
public static void main(String[] args) {
String money;
do {
money = getNum();
} while ((money != null && !(money.matches("[0-9]+.[0-9]*") || money
.matches("[0-9]*"))) || money == null);
// 把它转为大写的金额
String je = toUpperMoney(money);
System.out.println("RMB:" + je);
}
private static String toUpperMoney(String money) {
char[] upper = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
String[] w = { "", "拾", "佰", "仟", "万", "拾万", "佰万", "仟万", "亿", "拾亿",
"佰亿", "仟亿", "万亿" };
// 如果是小数则要最少要小数点后有两位
while (money.contains(".") && money.length() - money.indexOf('.') < 3) {
money = money + "0";
}
if (money.contains("."))
money = money.substring(0, money.indexOf('.') + 3);
char[] m = money.toCharArray();
if (money.charAt(0) == '0' && Double.parseDouble(money) > 0) {
// 金额小于1元
char fen = upper[m[m.length - 1] - '0'];
char jiao = upper[m[m.length - 2] - '0'];
if (fen != '零' && jiao != '零') {
return jiao + "角" + fen + "分";
} else if (fen == '零') {
return jiao + "角";
} else {
return fen + "分";
}
} else if (Double.parseDouble(money) == 0) {
return upper[0] + "元整";
} else if (!money.contains(".") && !(money.charAt(0) == '0')) {
// 金额是整的并且大于1元
// 判断长度:只取13位也就是万亿
if (m.length > 13)
return "大于13位不处理!";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < m.length; i++) {
sb.append(upper[m[i] - '0']);
sb.append(w[m.length - i - 1]);
}
String zjr = sb.toString();
// 把多的万、亿、零除掉
int index = zjr.lastIndexOf('万');
String sub;
if (index != -1) {
sub = zjr.substring(0, index).replaceAll("万", "");
zjr = sub + zjr.substring(index);
}
index = zjr.lastIndexOf('亿');
if (index != -1) {
sub = zjr.substring(0, index).replaceAll("亿", "");
zjr = sub + zjr.substring(index);
}
if (zjr.contains("零亿")) {
zjr = zjr.replace("零亿", "亿");
}
if (!zjr.contains("亿")) {
zjr = zjr.replaceAll("零万", "万");
}
zjr = zjr.replaceAll("零仟|零佰|零拾", "").replaceAll("零万", "零");
if (zjr.charAt(zjr.length() - 1) == '零') {
zjr = zjr.substring(0, zjr.length() - 1);
}
return zjr + "元整";
} else {
int index = money.indexOf(".");
String zjr = toUpperMoney(money.substring(0, index)).replaceAll(
"元整", "")
+ toUpperMoney("0" + money.substring(index, money.length()));
return zjr;
}
}
private static String getNum() {
if (n == 0)
System.out.print("请输入你的金额:");
else
System.out.print("请正确输入你的金额:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
return br.readLine();
} catch (Exception e) {
n++;
return null;
}
}
}
import java.math.BigDecimal; public class UpperStr { public static void main(String[] args){ String upperStr[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; String splitStr[] = {"","十","百","千","万","拾万","百万","千万","亿","十亿","百亿","千亿","兆","十兆","百兆","千兆"}; //需要转换的数据源 String lowerStr = "12345678.45"; int flag = 0; //对源字符串进行行处理 if("-".equals(lowerStr.charAt(0)+"")){ lowerStr = lowerStr.substring(1); flag = 1; } if ("+".equals(lowerStr.charAt(0) + "")) { lowerStr = lowerStr.substring(1); } //字符串的截取 int point = lowerStr.indexOf('.'); String zstr = lowerStr; //整数部分 String lstr = ""; //小数部分 if(point != -1) { zstr = lowerStr.substring(0, point); lstr = lowerStr.substring(point); } else{ zstr = lowerStr; lstr = ""; } //返回结果 String result = ""; int tmp = -1; int totallen = zstr.length(); for(int i = 0 ;i<totallen;i++){ if(i>=1) { tmp = Integer.parseInt(zstr.charAt(i - 1) + ""); } int index = Integer.parseInt(zstr.charAt(i) + ""); if(tmp == index && index == 0){ continue; } if("零".equals(upperStr[index])) result += upperStr[index]; else{ if( splitStr[totallen - i - 1].length()<1) result += upperStr[index] + splitStr[totallen - i - 1]; else result += upperStr[index] + splitStr[totallen - i - 1].substring(0,1); } } if("零".equals(result.charAt(0)+"") && result.length()>1) result = result.substring(1); //再处理小数部分 //判断是否存在小数部分 totallen = lstr.length(); BigDecimal b = new BigDecimal(0); if(totallen>1){ BigDecimal bd = new BigDecimal(lstr.substring(1)); if(bd.compareTo(b) != 0){ result += "点"; for(int i = 1;i<totallen;i++){ int index = Integer.parseInt(lstr.charAt(i) + ""); result += upperStr[index]; } } } if(flag == 1 && !"零".equals(result)) result = "负" + result; //再做一次替换处理 System.out.println(result); } }