Java 将数字金额转成中文大写
生活随笔
收集整理的這篇文章主要介紹了
Java 将数字金额转成中文大写
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
一個 Java 將數字金額轉成中文大寫的工具類,還不是很完善。
import java.util.regex.Matcher; import java.util.regex.Pattern;public class ChineseYuanUtil {private static final Pattern AMOUNT_PATTERN = Pattern.compile("^(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 amount 金額數字* @return 中文大寫* @throws IllegalArgumentException*/public static String convert(String amount) throws IllegalArgumentException {// 去掉分隔符amount = amount.replace(",", "");// 驗證金額正確性if (amount.equals("0.00")) {throw new IllegalArgumentException("金額不能為零.");}Matcher matcher = AMOUNT_PATTERN.matcher(amount);if (!matcher.find()) {throw new IllegalArgumentException("輸入金額有誤.");}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] : "");}// 將金額整數部分轉換為中文大寫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();} }測試類:
public static void main(String[] args) {System.out.println(ChineseYuanUtil.convert("16,409.02"));System.out.println(ChineseYuanUtil.convert("1,409.50"));System.out.println(ChineseYuanUtil.convert("6,007.14"));System.out.println(ChineseYuanUtil.convert("1,680.32"));System.out.println(ChineseYuanUtil.convert("325.04"));System.out.println(ChineseYuanUtil.convert("4,321.00"));System.out.println(ChineseYuanUtil.convert("0.05"));System.out.println(ChineseYuanUtil.convert("1234,5678,9012.34"));System.out.println(ChineseYuanUtil.convert("1000,1000,1000.10"));System.out.println(ChineseYuanUtil.convert("9005,9009,9009.99"));System.out.println(ChineseYuanUtil.convert("5432,0001,0001.01"));System.out.println(ChineseYuanUtil.convert("1000,0000,1110.00"));System.out.println(ChineseYuanUtil.convert("1010,0000,0001.11"));System.out.println(ChineseYuanUtil.convert("1012,0000,0000.01"));}輸出結果:
壹萬陸仟肆佰零玖元零貳分 壹仟肆佰零玖元伍角 陸仟零柒元壹角肆分 壹仟陸佰捌拾元叁角貳分 叁佰貳拾伍元零肆分 肆仟叁佰貳拾壹元整 伍分 壹仟貳佰叁拾肆億伍仟陸佰柒拾捌萬玖仟零壹拾貳元叁角肆分 壹仟億零壹仟萬零壹仟元壹角 玖仟零伍億玖仟零玖萬玖仟零玖元玖角玖分 伍仟肆佰叁拾貳億零壹萬零壹元零壹分 壹仟億零壹仟壹佰壹拾元整 壹仟零壹拾億零壹元壹角壹分 壹仟零壹拾貳億元零壹分轉載于:https://www.cnblogs.com/weisenz/archive/2012/09/05/2672176.html
總結
以上是生活随笔為你收集整理的Java 将数字金额转成中文大写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 春考计算机组装维修知识点,山东春考计算机
- 下一篇: java美元兑换,(Java实现) 美元