Java實(shí)現(xiàn)數(shù)字金額轉(zhuǎn)中文大寫金額的完整過程
一、功能概述
本程序?qū)崿F(xiàn)將用戶輸入的整數(shù)金額(0~9999999)轉(zhuǎn)換為符合財(cái)務(wù)規(guī)范的中文大寫金額,并自動(dòng)添加單位符號(如“萬”、“仟”、“佰”等)。例如輸入 1234,輸出 壹仟貳佰叁拾肆元。
二、核心代碼解析
1. 輸入驗(yàn)證模塊
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)
- 亮點(diǎn):使用無限循環(huán)強(qiáng)制用戶輸入合法值
- 風(fēng)險(xiǎn)點(diǎn):未處理非數(shù)字輸入(如輸入字母會(huì)崩潰)
2. 數(shù)字拆分與大寫轉(zhuǎn)換
String result = "";
while(true) {
int temp = inputMoney % 10; // 取末位數(shù)字
inputMoney = inputMoney / 10;
String resultString = toBigChange(temp); // 轉(zhuǎn)換為大寫
result = resultString + result; // 逆序拼接
if (inputMoney == 0) break;
}
- 算法邏輯:
- 通過取余操作
%10獲取數(shù)字的末位 - 通過整除
/10移除已處理的末位 - 逆序拼接保證數(shù)字順序正確
- 通過取余操作
3. 補(bǔ)零處理(七位對齊)
int len = 7 - result.length();
for(int i = 0; i < len; i++) {
result = "零" + result;
}
- 示例:輸入
123→ 補(bǔ)零為零零零壹貳叁 - 作用:為后續(xù)添加單位符號提供統(tǒng)一長度基礎(chǔ)
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
佰 拾 萬 仟 佰 拾 元- 輸出示例:
零佰零拾零萬壹仟貳佰叁拾肆元
三、關(guān)鍵方法說明
1. 數(shù)字轉(zhuǎn)大寫方法
public static String toBigChange(int number) {
String[] bigArray = {"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"};
return bigArray[number];
}
- 映射規(guī)則:直接通過數(shù)組下標(biāo)轉(zhuǎn)換
- 注意事項(xiàng):依賴輸入驗(yàn)證確保
number在0~9之間
四、運(yùn)行示例演示
輸入:1234處理流程:
- 拆分?jǐn)?shù)字:
1 2 3 4 - 轉(zhuǎn)大寫:
壹 貳 叁 肆 - 補(bǔ)零:
零零零壹貳叁肆 - 加單位:
零佰零拾零萬壹仟貳佰叁拾肆元
最終輸出:
零零零壹貳叁肆
零佰零拾零萬壹仟貳佰叁拾肆元
五、代碼優(yōu)化建議
1. 輸入驗(yàn)證增強(qiáng)
try {
int temp = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("請輸入數(shù)字!");
sc.nextLine(); // 清除非數(shù)字輸入
continue;
}
2. 單位順序調(diào)整
更符合中文習(xí)慣的單位順序:
String[] symbolArray = {"佰", "拾", "萬", "仟", "佰", "拾", "元"};
3. 補(bǔ)零邏輯優(yōu)化
// 使用String.format格式化補(bǔ)零
result = String.format("%07d", Integer.parseInt(result));
六、擴(kuò)展思考
如何支持更大金額(如億級)?
- 增加單位數(shù)組:
{"億", "仟", "佰", "拾", "萬", ...}
- 增加單位數(shù)組:
如何處理小數(shù)金額(元角分)?
- 拆分整數(shù)和小數(shù)部分分別處理
- 補(bǔ)充單位:
"角", "分"
如何去除多余零值?
- 正則替換:
result.replaceAll("零[仟佰拾]", "零")
- 正則替換:
七、源碼
package com.insightfuture.string;
import java.util.Scanner;
public class StringTest6 {
public static void main(String[] MakeItPossible) {
// 整數(shù)拆解
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("輸入的金額有誤,請重新輸入!");
}
}
// 將金額拆分后調(diào)用方轉(zhuǎn)成大寫金額,然后拼接處理
String result = "";
while(true) {
int temp = inputMoney % 10; // 得到最左邊的一個(gè)數(shù)
inputMoney = inputMoney / 10; // 刪除最左邊的一個(gè)數(shù)
// 將這個(gè)數(shù)傳給函數(shù)得到這個(gè)數(shù)的大寫形式
String resultString = toBigChange(temp);
// 將返回的大寫字母憑借,注意順序(拆是從右到左,拼接則是從左到右)
result = resultString + result;
if (inputMoney == 0) {
// 處理的數(shù)據(jù)到 0 了, 表示拆完了,直接終止!
break;
}
}
// 七位金額數(shù)值,不足左邊補(bǔ)零
int len = 7 - result.length();
for(int i = 0; i < len; i++) {
result = "零" + result;
}
System.out.println(result + " ");
System.out.println(addSymbolHandle(result) + " ");
}
/**
* toBigChange方法:根據(jù)傳入的數(shù)字返回該數(shù)字的大寫
* @param number
* @return String
*/
public static String toBigChange(int number) {
String[] bigArray = {"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"};
return bigArray[number];
}
/**
* addSymbolHandle方法:根據(jù)金額插入單位
* @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. 將字符拼接金額單位,累加后賦值給新的字符串存儲(chǔ)
resultString = resultString + s + symbolArray[i];
}
return resultString;
}
}
八、總結(jié)
通過這個(gè)案例,我們掌握了:
- 數(shù)字拆解與逆序拼接的技巧
- 中文金額單位的添加規(guī)則
- 輸入驗(yàn)證的基本實(shí)現(xiàn)方法
以上就是Java實(shí)現(xiàn)從數(shù)字到中文大寫金額的完整過程的詳細(xì)內(nèi)容,更多關(guān)于Java數(shù)字轉(zhuǎn)中文大寫金額的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Eclipse引用XSD實(shí)現(xiàn)XML配置文件提示標(biāo)簽的方法
今天小編就為大家分享一篇關(guān)于Eclipse引用XSD實(shí)現(xiàn)XML配置文件提示標(biāo)簽的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
Java程序連接數(shù)據(jù)庫的常用的類和接口介紹
這篇文章主要介紹了Java程序連接數(shù)據(jù)庫的常用的類和接口,包括Connection類和Statement類等,需要的朋友可以參考下2015-10-10
SpringBoot登錄驗(yàn)證碼實(shí)現(xiàn)過程詳解
這篇文章主要介紹了SpringBoot登錄驗(yàn)證碼實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Spring框架學(xué)習(xí)之Spring?@Autowired實(shí)現(xiàn)自動(dòng)裝配的代碼
自動(dòng)裝配就是說,你不用手動(dòng)實(shí)現(xiàn)bean之間的組合關(guān)系,只要使用了@Autowired注解,程序就會(huì)自動(dòng)的注入這個(gè)需要的bean,前提是你的Spring容器有這個(gè)bean,這篇文章主要介紹了Spring?@Autowired實(shí)現(xiàn)自動(dòng)裝配,需要的朋友可以參考下2021-12-12
java獲取網(wǎng)絡(luò)圖片上傳到OSS的方法
這篇文章主要為大家詳細(xì)介紹了java獲取網(wǎng)絡(luò)圖片上傳到OSS,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10

