人民币转换大写

public class CurrencyConverter {
    public static String convertToChineseCurrency(String amount) {
        if (amount == null || amount.isEmpty()) {
            return "零元整";
        }

        double value = Double.parseDouble(amount);
        if (value == 0) {
            return "零元整";
        }

        String[] digitUnits = {"元", "拾", "佰", "仟", "万"};
        String[] numerals = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};

        StringBuilder result = new StringBuilder();
        int integerPart = (int) value;
        int fractionalPart = (int) Math.round((value - integerPart) * 100);

        // 处理整数部分
        if (integerPart > 0) {
            String integerStr = String.valueOf(integerPart);
            int len = integerStr.length();
            boolean lastWasZero = false; // 用于记录上一个数字是否为零

            for (int i = 0; i < len; i++) {
                int num = Character.getNumericValue(integerStr.charAt(i));
                if (num != 0) {
                    if (lastWasZero) {
                        result.append("零"); // 添加“零”字
                        lastWasZero = false; // 重置状态
                    }
                    result.append(numerals[num]); // 添加数字
                    result.append(digitUnits[len - i - 1]); // 添加单位
                } else {
                    lastWasZero = true; // 当前数字是零,设置状态
                }
            }
        }

        // 处理小数部分
        if (fractionalPart > 0) {
            int jiao = fractionalPart / 10; // 角
            int fen = fractionalPart % 10;   // 分

            if (jiao != 0) {
                result.append(numerals[jiao]).append("角"); // 角
            }
            if (fen != 0) {
                result.append(numerals[fen]).append("分"); // 分
            }
        }

        if (result.length() == 0) {
            return "零元整";
        }

        if (fractionalPart == 0) {
            result.append("整");
        }

        return result.toString();
    }
}

使用:

@Override
     public List<BillInfoVo> getBillInfoByNalNo(String nalNo) {
         List<BillInfoVo> billInfoVoList = calBillInfoMapper.selectByNalNo(nalNo);
         billInfoVoList.forEach(vo->{
             vo.setTotalAmtInWords(CurrencyConverter.convertToChineseCurrency(String.valueOf(vo.getTotalAmount())));
             vo.setElectricityTypeDescription(ElecSortEnum.getDescriptionByCode(vo.getElectricityType()));
         });
         return billInfoVoList;
     }

最终输出:
在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐