黑马程序员技术交流社区
标题:
金额转换,阿拉伯数字转换成中国传统形式。
[打印本页]
作者:
xiaoxiaoyuxie
时间:
2017-3-8 23:47
标题:
金额转换,阿拉伯数字转换成中国传统形式。
我是来贴代码赚积分的 ,刚开始思路不对,用了好多循环,最后简化成这样,递归真是个好东西
public static void
main (String[] args){
long
number=
2300340099121419870L
; //一个超长的数字,取值范围为long类型的最大值
String value=
transform
(
""
, number);
System.
out
.print(value);
}
private static
String transform(String word,
long
number){
String tempStr=
""
+number;
int
len=tempStr.length();
//获取数字长度
if
(len==
1
){
word+=
getChineseWord
(number);
//如果剩个位数那么直接转换,并结束递归
return
word;
}
long
baseNum=
getBaseNum
(len);
//根据数字长度获取元单位(兆,亿,万等)
long
single= (number/baseNum);
//查看有多少个元单位
if
(single>
10
&&single<baseNum){
word+=
transform
(
""
,single);
//个位数以上的元单位递归处理
}
else
{
word+=
getChineseWord
(single);
//个位数的元单位转换后,继续执行
}
word=
checkZero
(word);
//避免 零万 零零万等情况出现
word+=
getChineseWord
(baseNum);
//拼接汉字元单位
number%=baseNum;
//去掉已转换的顶位,继续转换从元单位开始以下的数字
if
(number/(baseNum/
10
)==
0
){
//如果下一位是"0",那么拼接"零"字符
if
(len-
1
==
1
)
return
word;
//拼接中如果下一位已经是最后一位,那么中断拼接,直接返回.
word+=
getChineseWord
(
0
);
}
return
transform
(word,number);
//递归执行,直到len==1结束.
}
private static
String getChineseWord(
long
number){
if
(number==
10E15
){
//因switch 判断条件不能为long值,所以单独判断
return
"兆"
;
}
switch
((
int
)number){
case
0
:
return
"零"
;
case
1
:
return
"壹"
;
case
2
:
return
"贰"
;
case
3
:
return
"仨"
;
case
4
:
return
"肆"
;
case
5
:
return
"伍"
;
case
6
:
return
"陆"
;
case
7
:
return
"柒"
;
case
8
:
return
"捌"
;
case
9
:
return
"玖"
;
case
10
:
return
"拾"
;
case
100
:
return
"佰"
;
case
1000
:
return
"仟"
;
case
10000
:
return
"万"
;
case
100000000
:
return
"亿"
;
}
return
""
;
}
private static
Long getBaseNum(
int
len){
long
num=
1L
;
if
(len>=
17
){
//兆级别 ,long类型最长为19位,所以兆级别足矣
len=
17
;
}
else if
(len>=
9
){
//亿级别
len=
9
;
}
else if
(len>=
5
){
//万级别
len=
5
;
}
for
(
int
i =
1
; i < len; i++) {
num*=
10
;
}
return
num;
}
private static
String checkZero(String word){
if
(word.substring(word.length()-
1
).equals(
"零"
)){
word=word.substring(
0
,word.length()-
1
);
return
checkZero
(word);
}
else
{
return
word;
}
}
作者:
guoqibing
时间:
2017-3-9 00:41
看不懂
作者:
mrwalker
时间:
2017-3-10 09:13
我也表示还不能看懂
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2