• 招生咨詢熱線:4008-569-579 
  • 手機(jī)版
    用手機(jī)掃描二維碼直達(dá)商品手機(jī)版
招生咨詢熱線
4008-569-579
機(jī)構(gòu)主頁(yè) > 機(jī)構(gòu)新聞 > 將數(shù)字貨幣金額轉(zhuǎn)換為大寫格式
機(jī)構(gòu)主頁(yè) > 機(jī)構(gòu)新聞>將數(shù)字貨幣金額轉(zhuǎn)換為大寫格式

將數(shù)字貨幣金額轉(zhuǎn)換為大寫格式

來(lái)源:北京達(dá)內(nèi)教育        時(shí)間:2023-05-25        熱度:40℃        返回列表

【實(shí)例描述】

在處理財(cái)務(wù)賬款時(shí),一般需要使用大寫金額。如果在銀行進(jìn)行儲(chǔ)蓄或轉(zhuǎn)賬,也需要將數(shù)字金

額寫成大寫格式。也就是說(shuō),如果要轉(zhuǎn)賬123456

元,則

需要寫成“壹拾貳萬(wàn)叁仟肆佰伍拾陸元整”。對(duì)于這種情

況,如果手動(dòng)填寫不僅麻煩,而且容易出錯(cuò),所以我們

可以設(shè)計(jì)一個(gè)程序來(lái)自動(dòng)完成數(shù)字格式的轉(zhuǎn)換。本實(shí)例

實(shí)現(xiàn)了小寫金額到大寫金額的轉(zhuǎn)換,實(shí)例的運(yùn)行效果如

圖4.2

所示。

圖4.2 將數(shù)字貨幣金額轉(zhuǎn)換為大寫格式

【實(shí)現(xiàn)過(guò)程】

(1)在Eclipse 中新建項(xiàng)目MoneyConvert,并在其中創(chuàng)建一個(gè)MoneyConvert.java

文件。

在該類的主方法中創(chuàng)建標(biāo)準(zhǔn)輸入流的掃描器對(duì)象,接收用戶輸入的數(shù)字金額。然后在通過(guò)

convert()方法把這個(gè)金額轉(zhuǎn)換成大寫金額的字符串格式,并輸出到控制臺(tái)。核心代碼如下所示:

public

static void main(String[] args) {

Scanner scan = new Scanner(System.in); //

創(chuàng)建掃描器

System.out.println("請(qǐng)輸入一個(gè)金額");

// 獲取金額轉(zhuǎn)換后的字符串

String convert =

convert(scan.nextDouble());

System.out.println(convert); //

輸出轉(zhuǎn)換結(jié)果

}

(2)編寫金額轉(zhuǎn)換方法convert(),該方法在主方法中被調(diào)用,用于金額數(shù)字向大寫格式的

轉(zhuǎn)換。在該方法中創(chuàng)建DecimalFormat

類的實(shí)例對(duì)象,通過(guò)這個(gè)格式器對(duì)象把金額數(shù)字格式化,

只保留三位小數(shù)。然后分別調(diào)用getInteger()與getDecimal()方法轉(zhuǎn)換整數(shù)與小數(shù)部分,并返回

轉(zhuǎn)換后的結(jié)果。關(guān)鍵代碼如下:

public

static String convert(double d) {

// 實(shí)例化DecimalFormat 對(duì)象

DecimalFormat df = new DecimalFormat("#0.###");

// 格式化double 數(shù)字

String

strNum = df.format(d);

// 判斷是否包含小數(shù)點(diǎn)

if (strNum.indexOf(".") != -1)

{

String num = strNum.substring(0, strNum.indexOf("."));

// 整數(shù)部分大于12

不能轉(zhuǎn)換

if (num.length() > 12)

{

System.out.println("數(shù)字太大,不能完成轉(zhuǎn)換!");

return "";

}

}

String point

= ""; // 小數(shù)點(diǎn)

if (strNum.indexOf(".") != -1) {

point = "元";

} else

{

point = "元整";

}

// 轉(zhuǎn)換結(jié)果

String result = getInteger(strNum) + point

+ getDecimal(strNum);

if (result.startsWith("元")) { //

判斷是字符串是否已"元"結(jié)尾

result = result.substring(1, result.length()); // 截取字符串

}

return result; //

返回新的字符串

}

(3)編寫getInteger()方法,用于轉(zhuǎn)換數(shù)字整數(shù)部分的大寫格式。在該方法中判斷數(shù)字是否

包含小數(shù)點(diǎn),然后把數(shù)字轉(zhuǎn)換為字符串并反轉(zhuǎn)字符順序,為每個(gè)數(shù)字添加對(duì)應(yīng)的大寫單位。關(guān)

鍵代碼如下:

public

static String getInteger(String num) {

if (num.indexOf(".") != -1) { //

判斷是否包含小數(shù)點(diǎn)

um = num.substring(0, num.indexOf("."));

}

um = new StringBuffer(num).reverse().toString(); //

反轉(zhuǎn)字符串

StringBuffer temp = new StringBuffer(); //

創(chuàng)建一個(gè)StringBuffer

對(duì)象

for (int i = 0; i < num.length(); i++) { //

加入單位

temp.append(STR_UNIT[i]);

temp.append(STR_NUMBER[num.charAt(i) -

48]);

}

um = temp.reverse().toString(); // 反轉(zhuǎn)字符串

um = numReplace(num,

"零拾", "零"); // 替換字符串的字符

um = numReplace(num, "零佰", "零"); // 替換字符串的字符

um

= numReplace(num, "零仟", "零"); // 替換字符串的字符

um = numReplace(num, "零萬(wàn)", "萬(wàn)");

// 替換字符串的字符

um = numReplace(num, "零億", "億"); // 替換字符串的字符

um =

umReplace(num, "零零", "零"); // 替換字符串的字符

um = numReplace(num, "億萬(wàn)", "億"); //

替換字符串的字符

// 如果字符串以零結(jié)尾將其除去

if (num.lastIndexOf("零") == num.length() - 1)

{

um = num.substring(0, num.length() - 1);

}

return

um;

}

public static String getDecimal(String num) {

// 判斷是否包含小數(shù)點(diǎn)

if (num.indexOf(".") == -1) {

return "";

}

um =

um.substring(num.indexOf(".") + 1);

// 反轉(zhuǎn)字符串

um = new

StringBuffer(num).reverse().toString();

// 創(chuàng)建一個(gè)StringBuffer

對(duì)象

StringBuffer temp = new StringBuffer();

// 加入單位

for (int i = 0; i

< num.length(); i++)

{

temp.append(STR_UNIT2[i]);

temp.append(STR_NUMBER[num.charAt(i) -

48]);

}

um = temp.reverse().toString(); // 替換字符串的字符

um =

umReplace(num, "零角", "零"); // 替換字符串的字符

um = numReplace(num, "零分", "零"); //

替換字符串的字符

um = numReplace(num, "零厘", "零"); // 替換字符串的字符

um =

umReplace(num, "零零", "零"); // 替換字符串的字符

// 如果字符串以零結(jié)尾將其除去

if

(num.lastIndexOf("零") == num.length() - 1) {

um = num.substring(0,

um.length() - 1);

}

return num;

}

public static String

umReplace(String num, String oldStr, String newStr)

{

while (true)

{

// 判斷字符串中是否包含指定字符

if (num.indexOf(oldStr) == -1) {

break;

}

//

替換字符串

num = num.replaceAll(oldStr, newStr);

}

// 返回替換后的字符串

return

um;

}

【代碼解析】

實(shí)現(xiàn)本實(shí)例的關(guān)鍵在于以下幾點(diǎn):

? 將數(shù)字格式化,如果存在小數(shù)部分,將其轉(zhuǎn)換為3 位小數(shù),精確到厘。

?

分別將整數(shù)部分與小數(shù)部分轉(zhuǎn)換為大寫格式,并插入其單位(億、萬(wàn)、仟……)。

?

組合轉(zhuǎn)換后的整數(shù)部分與小數(shù)部分。

【知識(shí)擴(kuò)展】

DecimalFormat

類可以指定格式化模板來(lái)格式化浮點(diǎn)數(shù),如保留幾位小數(shù)。通過(guò)調(diào)用該類

的format()方法可以使用指定模板來(lái)格式化任意浮點(diǎn)數(shù)字。

電話咨詢

電話咨詢

咨詢電話:
4008-569-579
回到頂部

回到頂部