1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Java将数字金额转换为中文大写

Java将数字金额转换为中文大写

时间:2023-10-28 22:21:27

相关推荐

Java将数字金额转换为中文大写

import java.math.BigDecimal;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** /5/5** @author lf*/public class MoneyToChineseUtils {/*** 不考虑分隔符的正确性*/private static final Pattern AMOUNT_PATTERN = pile("^(0|[1-9]\\d{0,11})\\.(\\d\\d)$");private static final char[] RMB_NUMS = "零壹贰叁肆伍陆柒捌玖".toCharArray();private static final String[] UNITS = {"元", "角", "分", "整"};private static final String[] U1 = {"", "拾", "佰", "仟"};private static final String[] U2 = {"", "万", "亿"};/*** 将金额(整数部分等于或少于12位,小数部分2位)转换为中文大写形式.** @param money 金额数字* @return 中文大写*/public static String convert(Double money) {money = Math.abs(money);if (Double.valueOf(0).equals(money)) {return "零元整";}String amount = moneyFormat(money);// 去掉分隔符amount = amount.replace(",", "");// 验证金额正确性Matcher matcher = AMOUNT_PATTERN.matcher(amount);if (!matcher.find()) {}// 整数部分String integer = matcher.group(1);// 小数部分String fraction = matcher.group(2);String result = "";if (!integer.equals("0")) {// 整数部分result += integer2rmb(integer) + UNITS[0];}if (fraction.equals("00")) {// 添加[整]result += UNITS[3];} else if (fraction.startsWith("0") && integer.equals("0")) {// 去掉分前面的[零]result += fraction2rmb(fraction).substring(1);} else {// 小数部分result += fraction2rmb(fraction);}return result;}/*** 将金额小数部分转换为中文大写*/private static String fraction2rmb(String fraction) {// 角char jiao = fraction.charAt(0);// 分char fen = fraction.charAt(1);return (RMB_NUMS[jiao - '0'] + (jiao > '0' ? UNITS[1] : "")) + (fen > '0' ? RMB_NUMS[fen - '0'] + UNITS[2] : "");}/*** 将金额整数部分转换为中文大写** @param integer* @return*/private static String integer2rmb(String integer) {StringBuilder buffer = new StringBuilder();// 从个位数开始转换int i, j;for (i = integer.length() - 1, j = 0; i >= 0; i--, j++) {char n = integer.charAt(i);if (n == '0') {// 当n是0且n的右边一位不是0时,插入[零]if (i < integer.length() - 1 && integer.charAt(i + 1) != '0') {buffer.append(RMB_NUMS[0]);}// 插入[万]或者[亿]if (j % 4 == 0) {if (i > 0 && integer.charAt(i - 1) != '0'|| i > 1 && integer.charAt(i - 2) != '0'|| i > 2 && integer.charAt(i - 3) != '0') {buffer.append(U2[j / 4]);}}} else {if (j % 4 == 0) {// 插入[万]或者[亿]buffer.append(U2[j / 4]);}// 插入[拾]、[佰]或[仟]buffer.append(U1[j % 4]);// 插入数字buffer.append(RMB_NUMS[n - '0']);}}return buffer.reverse().toString();}/*** 对金额的格式调整到分** @param preMoney* @return*/public static String moneyFormat(Double preMoney) {//23->23.00String money = preMoney.toString();StringBuffer sb = new StringBuffer();if (money == null) {return "0.00";}int index = money.indexOf(".");if (index == -1) {return money + ".00";} else {//整数部分String s0 = money.substring(0, index);//小数部分String s1 = money.substring(index + 1);if (s1.length() == 1) {//小数点后一位s1 = s1 + "0";} else if (s1.length() > 2) {//如果超过3位小数,截取2位就可以了s1 = s1.substring(0, 2);}sb.append(s0);sb.append(".");sb.append(s1);}return sb.toString();}/*** 对金额的格式调整到分** @param preMoney* @return*/public static String moneyFormat(BigDecimal preMoney) {//23->23.00String money = preMoney.toString();StringBuffer sb = new StringBuffer();if (money == null) {return "0.00";}int index = money.indexOf(".");if (index == -1) {return money + ".00";} else {//整数部分String s0 = money.substring(0, index);//小数部分String s1 = money.substring(index + 1);if (s1.length() == 1) {//小数点后一位s1 = s1 + "0";} else if (s1.length() > 2) {//如果超过3位小数,截取2位就可以了s1 = s1.substring(0, 2);}sb.append(s0);sb.append(".");sb.append(s1);}return sb.toString();}/*** 对金额的格式调整到分** @param preMoney* @return*/public static String moneyFormat(String preMoney) {//23->23.00String money = preMoney;StringBuffer sb = new StringBuffer();if (money == null) {return "0.00";}int index = money.indexOf(".");if (index == -1) {return money + ".00";} else {//整数部分String s0 = money.substring(0, index);//小数部分String s1 = money.substring(index + 1);if (s1.length() == 1) {//小数点后一位s1 = s1 + "0";} else if (s1.length() > 2) {//如果超过3位小数,截取2位就可以了s1 = s1.substring(0, 2);}sb.append(s0);sb.append(".");sb.append(s1);}return sb.toString();}/*** @param args*/public static void main(String[] args) {// System.out.println(MoneyToChineseUtils.moneyFormat(123.2803));System.out.println(MoneyToChineseUtils.convert(100.0));}}

结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。