Java实现数字金额转中文大写金额的完整过程
作者:InsightFuture
本程序实现将用户输入的整数金额(0~9999999)转换为符合财务规范的中文大写金额,并自动添加单位符号(如“万”、“仟”、“佰”等),例如输入 1234,输出 壹仟贰佰叁拾肆元,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
一、功能概述
本程序实现将用户输入的整数金额(0~9999999)转换为符合财务规范的中文大写金额,并自动添加单位符号(如“万”、“仟”、“佰”等)。例如输入 1234
,输出 壹仟贰佰叁拾肆元
。
二、核心代码解析
1. 输入验证模块
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. 数字拆分与大写转换
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. 补零处理(七位对齐)
int len = 7 - result.length(); for(int i = 0; i < len; i++) { result = "零" + result; }
- 示例:输入
123
→ 补零为零零零壹贰叁
- 作用:为后续添加单位符号提供统一长度基础
4. 添加金额单位
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; }
单位对照表:
索引 0 1 2 3 4 5 6 佰 拾 万 仟 佰 拾 元
- 输出示例:
零佰零拾零万壹仟贰佰叁拾肆元
三、关键方法说明
1. 数字转大写方法
public static String toBigChange(int number) { String[] bigArray = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; return bigArray[number]; }
- 映射规则:直接通过数组下标转换
- 注意事项:依赖输入验证确保
number
在0~9之间
四、运行示例演示
输入:1234
处理流程:
- 拆分数字:
1 2 3 4
- 转大写:
壹 贰 叁 肆
- 补零:
零零零壹贰叁肆
- 加单位:
零佰零拾零万壹仟贰佰叁拾肆元
最终输出:
零零零壹贰叁肆
零佰零拾零万壹仟贰佰叁拾肆元
五、代码优化建议
1. 输入验证增强
try { int temp = sc.nextInt(); } catch (InputMismatchException e) { System.out.println("请输入数字!"); sc.nextLine(); // 清除非数字输入 continue; }
2. 单位顺序调整
更符合中文习惯的单位顺序:
String[] symbolArray = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
3. 补零逻辑优化
// 使用String.format格式化补零 result = String.format("%07d", Integer.parseInt(result));
六、扩展思考
如何支持更大金额(如亿级)?
- 增加单位数组:
{"亿", "仟", "佰", "拾", "万", ...}
- 增加单位数组:
如何处理小数金额(元角分)?
- 拆分整数和小数部分分别处理
- 补充单位:
"角", "分"
如何去除多余零值?
- 正则替换:
result.replaceAll("零[仟佰拾]", "零")
- 正则替换:
七、源码
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; } }
八、总结
通过这个案例,我们掌握了:
- 数字拆解与逆序拼接的技巧
- 中文金额单位的添加规则
- 输入验证的基本实现方法
以上就是Java实现从数字到中文大写金额的完整过程的详细内容,更多关于Java数字转中文大写金额的资料请关注脚本之家其它相关文章!