数字转人民币大写
来源:互联网 发布:windows vim 全屏 编辑:程序博客网 时间:2024/04/30 09:23
import java.lang.Math; import java.util.Random; // 数字转人民币 public class Num2RMB { // 大写数字字符串 private static String[] RMB = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; // 单位数组 private static String[] unit = {"角","分","圆","拾","佰","仟","万","拾","佰","仟","亿"}; // 转换成大写RMB public static String toRMB(String num) { // 结果 String result = ""; // 将待转换的数字分解成整数及小数2部分 String integer = divide(num, true); String decimal = divide(num, false); // 将整数部分及小数部分分别转换成相应大写,并添加单位 result += convert(integer, true); result += convert(decimal, false); // 正则表达式替换,清除多余的零 result = zeroClear(result); return result; } // 替换结果中的"零分"、"零角"、"零圆"、"零拾"、"零佰"、"零仟"、"零万" private static String zeroClear(String str) { String[] regex = {"零分","零角","零拾","零佰","零仟"}; //结果 String result = str; // 正则表达式替换 for (int i = 0;i < regex.length ;i++ ) { result = result.replace(regex[i], "零"); } // 清除多余的零 result = result.replace("零零零零",""); result = result.replace("零零零","零"); result = result.replace("零零","零"); result = result.replace("零万","万"); result = result.replace("零圆","圆"); return result; } // 将待转换的数字分解成整数及小数2部分 private static String divide(String num, boolean isIntegerPart) { String result = ""; // 若isIntegerPart为true,表明截取的是整数部分 if (isIntegerPart) { // 用以"."为分割符,应写成"\\."才符合正则表达式 result = num.split("\\.")[0]; // 去除开头多余的"0" while(result.charAt(0) == '0') { result = result.substring(1); } return result; } else { String tmp = num.split("\\.")[1]; // 截取小数点后2位 result = tmp.substring(0, 2); return result; } } // 将整数部分及小数部分分别转换成相应大写,并添加单位 private static String convert(String str, boolean isIntegerPart) { String result = ""; int strLength = str.length(); // 转换整数部分 if (isIntegerPart) { for (int i = 0;i < strLength ;i++ ) { // 将字符转换成相应的数字大写 result += RMB[str.charAt(i) - 48]; // 添加单位 result += unit[strLength - i + 1]; } return result; } else { for (int i = 0;i < strLength ;i++ ) { // 将字符转换成相应的数字大写 result += RMB[str.charAt(i) - 48]; // 添加单位 result += unit[i]; } return result; } } // main public static void main(String[] args) { // 待转换的数字长度 Random random = new Random(); int length = random.nextInt(10) + 1; String str = ""; // 随机生成整数部分 for (int i = 0;i < length ;i++ ) { str += String.valueOf((int)(Math.random() * 10)); } // 随机生成小数部分 str += "."; for (int i = 0;i < 2 ;i++ ) { str += String.valueOf((int)(Math.random() * 10)); } System.out.println(str); System.out.println(Num2RMB.toRMB(str)); } }