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. 输入验证的基本实现方法

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

相关推荐
红尘散仙5 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记7 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆7 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪7 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6168 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364578 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao8 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒9 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰10 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox10 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全