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