Java 人名币转大写

public class AmountInWordsUtils {

    private static final String[] BIG_UNIT = {"", "万", "亿"};
    private static final String[] SMALL_UNIT = {"", "拾", "佰", "仟"};
    private static final String[] UP_NUM = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};

    public static void main(String[] args) {
        BigDecimal inputMoney = new BigDecimal("1000009.32");
        String result = toChinese(inputMoney);
        System.out.println(result);
    }

    public static String toChinese(BigDecimal inputMoney) {
        StringBuilder result = new StringBuilder();

        // 处理整数部分
        long integerPart = inputMoney.setScale(0, RoundingMode.DOWN).longValue();
        if (integerPart == 0) {
            result.append("零元");
        } else {
            result.append(convert(integerPart)).append("元");
        }

        // 处理小数部分
        long decimalPart = inputMoney.movePointRight(2).setScale(0, RoundingMode.DOWN).longValue() % 100;
        if (decimalPart == 0) {
            result.append("整");
        } else {
            String s = String.valueOf(decimalPart);
            result.append(UP_NUM[s.charAt(0) - '0']).append("角");
            result.append(UP_NUM[s.charAt(1) - '0']).append("分");
        }
        return result.toString();
    }

    private static String convert(long num) {
        StringBuilder result = new StringBuilder();

        // 按照万、亿的单位进行转换
        int bigIdx = 0;
        while (num > 0) {
            long temp = num % 10000;
            if (temp > 0) {
                result.insert(0, BIG_UNIT[bigIdx]);
            }
            result.insert(0, convert4(temp));
            num /= 10000;
            bigIdx++;
        }

        // 去掉前导的零
        while (result.length() > 1 && result.charAt(0) == UP_NUM[0].charAt(0)) {
            result.deleteCharAt(0);
        }

        return result.toString();
    }

    private static String convert4(long num) {
        StringBuilder result = new StringBuilder();

        // 按照拾、佰、仟的单位进行转换
        int smallIdx = 0;
        while (num > 0) {
            long digit = num % 10;
            if (digit > 0) {
                result.insert(0, SMALL_UNIT[smallIdx]);
                result.insert(0, UP_NUM[(int) digit]);
            }
            num /= 10;
            smallIdx++;
        }

        // 去掉前导的零
        while (result.length() > 1 && result.charAt(0) == UP_NUM[0].charAt(0)) {
            result.deleteCharAt(0);
        }

        return result.toString();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是Java代码将数字换为人民币大写的方法: ```java import java.text.DecimalFormat; public class RMBConverter { private static final String[] CN_NUM = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; private static final String[] CN_UNIT = {"", "拾", "佰", "仟"}; private static final String[] CN_SECTION = {"", "万", "亿", "万亿"}; public static String convert(double num) { if (num == 0) { return "零元整"; } long integer = (long) num; // 整数部分 StringBuilder sb = new StringBuilder(); int sectionIndex = 0; // 记录当前处理的是第几个节权位 while (integer > 0) { int section = (int) (integer % 10000); // 取最后四位 sb.insert(0, CN_SECTION[sectionIndex]); // 插入节权位 sb.insert(0, sectionToChinese(section)); // 插入节内数字 integer /= 10000; // 去掉已经处理的最后四位 sectionIndex++; // 移动到下一个节权位 } if (num < 0) { sb.insert(0, "负"); } DecimalFormat decimalFormat = new DecimalFormat("#.00"); String decimal = decimalFormat.format(num - (long) num); // 小数部分 if (decimal.equals("0.00")) { sb.append("整"); } else { sb.append(decimal.substring(2)).append("分"); sb.insert(0, decimalToChinese(decimal.substring(0, 2)) + "角"); } return sb.toString(); } private static String sectionToChinese(int section) { StringBuilder sb = new StringBuilder(); if (section == 0) { return CN_NUM[0]; } int unitIndex = 0; // 记录当前处理的是第几位 boolean zero = true; // 记录当前位是否为零 while (section > 0) { int digit = section % 10; // 取最后一位 if (digit == 0) { if (!zero) { sb.insert(0, CN_NUM[0]); // 插入零 zero = true; } } else { sb.insert(0, CN_UNIT[unitIndex]); // 插入单位 sb.insert(0, CN_NUM[digit]); // 插入数字 zero = false; } section /= 10; // 去掉已经处理的最后一位 unitIndex++; // 移动到下一位 } return sb.toString(); } private static String decimalToChinese(String decimal) { StringBuilder sb = new StringBuilder(); if (decimal.equals("00")) { return ""; } int digit1 = decimal.charAt(0) - '0'; int digit2 = decimal.charAt(1) - '0'; if (digit1 > 0) { sb.append(CN_NUM[digit1]).append("拾"); } else if (digit2 > 0) { sb.append("零"); } if (digit2 > 0) { sb.append(CN_NUM[digit2]); } return sb.toString(); } } ``` 使用方法如下: ```java double num = 123456789.12; String rmb = RMBConverter.convert(num); System.out.println(rmb); // 壹亿贰仟叁佰肆拾伍万陆仟柒百捌十玖元壹角贰分 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值