碼上歡樂
首頁
榜單
標簽
關於
搜索
相關內容
簡體
繁體
java實現小寫金額轉換大寫金額
本文轉載自
查看原文
2013-09-28 10:46
2721
package
com.sunboon.jiexi;
/**
*
* @author qizhenglong
*
*/
public
class
MoneyUtil {
/** 大寫數字 */
private
static
final
String[] NUMBERS = {
"零"
,
"壹"
,
"貳"
,
"叄"
,
"肆"
,
"伍"
,
"陸"
,
"柒"
,
"捌"
,
"玖"
};
/** 整數部分的單位 */
private
static
final
String[] IUNIT = {
"元"
,
"拾"
,
"佰"
,
"仟"
,
"萬"
,
"拾"
,
"佰"
,
"仟"
,
"億"
,
"拾"
,
"佰"
,
"仟"
,
"萬"
,
"拾"
,
"佰"
,
"仟"
};
/** 小數部分的單位 */
private
static
final
String[] DUNIT = {
"角"
,
"分"
,
"厘"
};
/**
* 得到大寫金額。
*/
public
static
String toChinese(String str) {
str = str.replaceAll(
","
,
""
);
// 去掉","
String integerStr;
// 整數部分數字
String decimalStr;
// 小數部分數字
// 初始化:分離整數部分和小數部分
if
(str.indexOf(
"."
) >
0
) {
integerStr = str.substring(
0
, str.indexOf(
"."
));
decimalStr = str.substring(str.indexOf(
"."
) +
1
);
}
else
if
(str.indexOf(
"."
) ==
0
) {
integerStr =
""
;
decimalStr = str.substring(
1
);
}
else
{
integerStr = str;
decimalStr =
""
;
}
// integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
if
(!integerStr.equals(
""
)) {
integerStr = Long.toString(Long.parseLong(integerStr));
if
(integerStr.equals(
"0"
)) {
integerStr =
""
;
}
}
// overflow超出處理能力,直接返回
if
(integerStr.length() > IUNIT.length) {
System.out.println(str +
":超出處理能力"
);
return
str;
}
int
[] integers = toArray(integerStr);
// 整數部分數字
boolean
isMust5 = isMust5(integerStr);
// 設置萬單位
int
[] decimals = toArray(decimalStr);
// 小數部分數字
return
getChineseInteger(integers, isMust5)
+ getChineseDecimal(decimals);
}
/**
* 整數部分和小數部分轉換為數組,從高位至低位
*/
private
static
int
[] toArray(String number) {
int
[] array =
new
int
[number.length()];
for
(
int
i =
0
; i < number.length(); i++) {
array[i] = Integer.parseInt(number.substring(i, i +
1
));
}
return
array;
}
/**
* 得到中文金額的整數部分。
*/
將夜
www.jiangyea.com
private
static
String getChineseInteger(
int
[] integers,
boolean
isMust5) {
StringBuffer chineseInteger =
new
StringBuffer(
""
);
int
length = integers.length;
for
(
int
i =
0
; i < length; i++) {
// 0出現在關鍵位置:1234(萬)5678(億)9012(萬)3456(元)
// 特殊情況:10(拾元、壹拾元、壹拾萬元、拾萬元)
String key =
""
;
if
(integers[i] ==
0
) {
if
((length - i) ==
13
)
// 萬(億)(必填)
key = IUNIT[
4
];
else
if
((length - i) ==
9
)
// 億(必填)
key = IUNIT[
8
];
else
if
((length - i) ==
5
&& isMust5)
// 萬(不必填)
key = IUNIT[
4
];
else
if
((length - i) ==
1
)
// 元(必填)
key = IUNIT[
0
];
// 0遇非0時補零,不包含最后一位
if
((length - i) >
1
&& integers[i +
1
] !=
0
)
key += NUMBERS[
0
];
}
chineseInteger.append(integers[i] ==
0
? key
: (NUMBERS[integers[i]] + IUNIT[length - i -
1
]));
}
return
chineseInteger.toString();
}
/**
* 得到中文金額的小數部分。
*/
private
static
String getChineseDecimal(
int
[] decimals) {
StringBuffer chineseDecimal =
new
StringBuffer(
""
);
for
(
int
i =
0
; i < decimals.length; i++) {
// 舍去3位小數之后的
if
(i ==
3
)
break
;
chineseDecimal.append(decimals[i] ==
0
?
""
: (NUMBERS[decimals[i]] + DUNIT[i]));
}
return
chineseDecimal.toString();
}
/**
* 判斷第5位數字的單位"萬"是否應加。
*/
private
static
boolean
isMust5(String integerStr) {
int
length = integerStr.length();
if
(length >
4
) {
String subInteger =
""
;
if
(length >
8
) {
// 取得從低位數,第5到第8位的字串
subInteger = integerStr.substring(length -
8
, length -
4
);
}
else
{
subInteger = integerStr.substring(
0
, length -
4
);
}
return
Integer.parseInt(subInteger) >
0
;
}
else
{
return
false
;
}
}
public
static
void
main(String[] args) {
MoneyUtil moneyUtil =
new
MoneyUtil();
System.out.println(moneyUtil.toChinese(
"5000.23"
));
}
}
×
免責聲明!
本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。
猜您在找
Java代碼實現數字金額轉換為中文大寫形式
JS人民幣小寫金額轉換為大寫
java 金額數字轉換大寫算法
PHP數字金額轉換大寫金額
js金額轉換為大寫
Java實現數字大寫轉換
C# 人民幣大寫金額轉換
jquery 金額轉換成大寫
JS 數字轉換為大寫金額
C#人民幣金額大寫轉換
粵ICP備18138465號
© 2018-2025 CODEPRJ.COM