Java金额转换实战:从数字到中文大写金额的完整实现

一、功能概述

本程序实现将用户输入的整数金额(0~9999999)转换为符合财务规范的中文大写金额,并自动添加单位符号(如"万"、"仟"、"佰"等)。例如输入 1234,输出 壹仟贰佰叁拾肆元


二、核心代码解析

1. 输入验证模块

java 复制代码
int inputMoney;
while (true) {
    System.out.println("请输入金额:");
    int temp = sc.nextInt();
    if (temp >= 0 && temp <= 9999999) {
        inputMoney = temp;
        break;
    } else {
        System.out.println("输入的金额有误,请重新输入!");
    }
}
  • 功能:确保输入金额在合法范围(0~9,999,999)
  • 亮点:使用无限循环强制用户输入合法值
  • 风险点:未处理非数字输入(如输入字母会崩溃)

2. 数字拆分与大写转换

java 复制代码
String result = "";
while(true) {
    int temp = inputMoney % 10;   // 取末位数字
    inputMoney = inputMoney / 10; 
    String resultString = toBigChange(temp); // 转换为大写
    result = resultString + result; // 逆序拼接
    if (inputMoney == 0) break;
}
  • 算法逻辑
    • 通过取余操作 %10 获取数字的末位
    • 通过整除 /10 移除已处理的末位
    • 逆序拼接保证数字顺序正确

3. 补零处理(七位对齐)

java 复制代码
int len = 7 - result.length();
for(int i = 0; i < len; i++) {
    result = "零" + result;
}
  • 示例 :输入 123 → 补零为 零零零壹贰叁
  • 作用:为后续添加单位符号提供统一长度基础

4. 添加金额单位

java 复制代码
public static String addSymbolHandle(String string) {
    String[] symbolArray = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
    String resultString = "";
    for(int i = 0; i < string.length(); i++) {
        char s = string.charAt(i);
        resultString += s + symbolArray[i];
    }
    return resultString;
}
  • 单位对照表

    markdown 复制代码
    索引 0   1    2    3    4    5    6
        佰  拾   万   仟   佰   拾   元
  • 输出示例零佰零拾零万壹仟贰佰叁拾肆元


三、关键方法说明

1. 数字转大写方法

java 复制代码
public static String toBigChange(int number) {
    String[] bigArray = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    return bigArray[number];
}
  • 映射规则:直接通过数组下标转换
  • 注意事项 :依赖输入验证确保 number 在0~9之间

四、运行示例演示

输入1234
处理流程

  1. 拆分数字:1 2 3 4
  2. 转大写:壹 贰 叁 肆
  3. 补零:零零零壹贰叁肆
  4. 加单位:零佰零拾零万壹仟贰佰叁拾肆元

最终输出

复制代码
零零零壹贰叁肆 
零佰零拾零万壹仟贰佰叁拾肆元 

五、代码优化建议

1. 输入验证增强

java 复制代码
try {
    int temp = sc.nextInt();
} catch (InputMismatchException e) {
    System.out.println("请输入数字!");
    sc.nextLine(); // 清除非数字输入
    continue;
}

2. 单位顺序调整

更符合中文习惯的单位顺序:

java 复制代码
String[] symbolArray = {"佰", "拾", "万", "仟", "佰", "拾", "元"};

3. 补零逻辑优化

java 复制代码
// 使用String.format格式化补零
result = String.format("%07d", Integer.parseInt(result));

六、扩展思考

  1. 如何支持更大金额(如亿级)?

    • 增加单位数组:{"亿", "仟", "佰", "拾", "万", ...}
  2. 如何处理小数金额(元角分)?

    • 拆分整数和小数部分分别处理
    • 补充单位:"角", "分"
  3. 如何去除多余零值

    • 正则替换:result.replaceAll("零[仟佰拾]", "零")

七、源码

java 复制代码
package com.insightfuture.string;

import java.util.Scanner;

public class StringTest6 {
    public static void main(String[] MakeItPossible) {
        // 整数拆解
        Scanner sc = new Scanner(System.in);
        int inputMoney;
        while (true) {
            System.out.println("请输入金额:");
            int temp = sc.nextInt();
            if (temp >= 0 && temp <= 9999999) {
                inputMoney = temp;
                break;
            } else {
                System.out.println("输入的金额有误,请重新输入!");
            }
        }

        // 将金额拆分后调用方转成大写金额,然后拼接处理
        String result = "";
        while(true) {
            int temp = inputMoney % 10;   // 得到最左边的一个数
            inputMoney = inputMoney / 10; // 删除最左边的一个数
            // 将这个数传给函数得到这个数的大写形式
            String resultString = toBigChange(temp);
            // 将返回的大写字母凭借,注意顺序(拆是从右到左,拼接则是从左到右)
            result = resultString + result;
            if (inputMoney == 0) {
                // 处理的数据到 0 了, 表示拆完了,直接终止!
                break;
            }
        }
        // 七位金额数值,不足左边补零
        int len = 7 - result.length();
        for(int i = 0; i < len; i++) {
            result = "零" + result;
        }
        System.out.println(result + " ");
        System.out.println(addSymbolHandle(result) + " ");
    }

    /**
     * toBigChange方法:根据传入的数字返回该数字的大写
     * @param number
     * @return String
     */
    public static String toBigChange(int number) {
        String[] bigArray = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        return bigArray[number];
    }

    /**
     * addSymbolHandle方法:根据金额插入单位
     * @param string
     * @return String
     */
    public static String addSymbolHandle(String string) {
        String[] symbolArray = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
        String resultString = "";
        for(int i = 0; i < string.length(); i++) {
            // 1. 将字符串才分成 字符
            char s = string.charAt(i);
            // 2. 将字符拼接金额单位,累加后赋值给新的字符串存储
            resultString = resultString + s + symbolArray[i];
        }
        return resultString;
    }
}

八、总结

通过这个案例,我们掌握了:

  1. 数字拆解与逆序拼接的技巧
  2. 中文金额单位的添加规则
  3. 输入验证的基本实现方法

动手挑战:尝试为本程序添加小数处理功能,在评论区晒出你的代码! 💻🚀

相关推荐
神奇小汤圆6 分钟前
Unsafe魔法类深度解析:Java底层操作的终极指南
后端
神奇小汤圆39 分钟前
浅析二叉树、B树、B+树和MySQL索引底层原理
后端
文艺理科生1 小时前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
前端·后端·架构
千寻girling1 小时前
主管:”人家 Node 框架都用 Nest.js 了 , 你怎么还在用 Express ?“
前端·后端·面试
南极企鹅1 小时前
springBoot项目有几个端口
java·spring boot·后端
Luke君607971 小时前
Spring Flux方法总结
后端
define95271 小时前
高版本 MySQL 驱动的 DNS 陷阱
后端
忧郁的Mr.Li2 小时前
SpringBoot中实现多数据源配置
java·spring boot·后端
暮色妖娆丶2 小时前
SpringBoot 启动流程源码分析 ~ 它其实不复杂
spring boot·后端·spring
Coder_Boy_2 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring