lzzzing学习笔记
正在学的和想要学的
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
44 随笔 :: 7 文章 :: 17 评论 :: 0 Trackbacks
<
2008年9月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
(44)
C/C++(2)
(rss)
FP(4)
(rss)
Java(6)
(rss)
Linux(1)
(rss)
PHP(6)
(rss)
Python(11)
(rss)
实验室(1)
(rss)
算法(2)
(rss)
网站建设(11)
(rss)
随笔档案
(44)
2008年5月 (8)
2008年4月 (36)
文章档案
(7)
2008年4月 (7)
搜索
积分与排名
积分 - 5461
排名 - 182
最新评论
1. re: Java Socket 编程——多线程网络聊天程序
我的文章,怎么……,转载请注明出处!
--longlongago
2. re: Java Socket 编程——多线程网络聊天程序
感谢~
--踏雪赤兔
3. re: Java克隆(Clone)的应用
没错,使用克隆有时会好呢有效率。
--图书
4. re: 函数的副作用及其他
尽量传值,少用变参。
--图书
5. re: Java Socket 编程——多线程网络聊天程序
源码还有注解,挺好读的。
--图书
阅读排行榜
1. Python精要参考第九章(332)
2. Python精要参考第三章(297)
3. Java Socket 编程——多线程网络聊天程序(250)
4. Python精要参考第一章(250)
5. Python精要参考第四章(220)
评论排行榜
1. Java Socket 编程——多线程网络聊天程序(3)
2. 编写跨平台Java程序注意事项(2)
3. mandrake(2)
4. 一位大牛整理的Python资源(2)
5. Haskell教程(2)
Java转换大写金额的代码
1
package
PrintOperate;
2
3
import
java.text.NumberFormat;
4
import
java.util.HashMap;
5
6
public
class
SimpleMoneyFormat
7
{
8
9
public
static
final
String EMPTY
=
""
;
10
public
static
final
String ZERO
=
"
零
"
;
11
public
static
final
String ONE
=
"
壹
"
;
12
public
static
final
String TWO
=
"
贰
"
;
13
public
static
final
String THREE
=
"
叁
"
;
14
public
static
final
String FOUR
=
"
肆
"
;
15
public
static
final
String FIVE
=
"
伍
"
;
16
public
static
final
String SIX
=
"
陆
"
;
17
public
static
final
String SEVEN
=
"
柒
"
;
18
public
static
final
String EIGHT
=
"
捌
"
;
19
public
static
final
String NINE
=
"
玖
"
;
20
public
static
final
String TEN
=
"
拾
"
;
21
public
static
final
String HUNDRED
=
"
佰
"
;
22
public
static
final
String THOUSAND
=
"
仟
"
;
23
public
static
final
String TEN_THOUSAND
=
"
万
"
;
24
public
static
final
String HUNDRED_MILLION
=
"
亿
"
;
25
public
static
final
String YUAN
=
"
元
"
;
26
public
static
final
String JIAO
=
"
角
"
;
27
public
static
final
String FEN
=
"
分
"
;
28
public
static
final
String DOT
=
"
.
"
;
29
private
static
SimpleMoneyFormat formatter
=
null
;
30
private
HashMap chineseNumberMap
=
new
HashMap();
31
private
HashMap chineseMoneyPattern
=
new
HashMap();
32
private
NumberFormat numberFormat
=
NumberFormat.getInstance();
33
34
private
SimpleMoneyFormat()
35
{
36
numberFormat.setMaximumFractionDigits(
4
);
37
numberFormat.setMinimumFractionDigits(
2
);
38
numberFormat.setGroupingUsed(
false
);
39
40
chineseNumberMap.put(
"
0
"
, ZERO);
41
chineseNumberMap.put(
"
1
"
, ONE);
42
chineseNumberMap.put(
"
2
"
, TWO);
43
chineseNumberMap.put(
"
3
"
, THREE);
44
chineseNumberMap.put(
"
4
"
, FOUR);
45
chineseNumberMap.put(
"
5
"
, FIVE);
46
chineseNumberMap.put(
"
6
"
, SIX);
47
chineseNumberMap.put(
"
7
"
, SEVEN);
48
chineseNumberMap.put(
"
8
"
, EIGHT);
49
chineseNumberMap.put(
"
9
"
, NINE);
50
chineseNumberMap.put(DOT, DOT);
51
52
chineseMoneyPattern.put(
"
1
"
, TEN);
53
chineseMoneyPattern.put(
"
2
"
, HUNDRED);
54
chineseMoneyPattern.put(
"
3
"
, THOUSAND);
55
chineseMoneyPattern.put(
"
4
"
, TEN_THOUSAND);
56
chineseMoneyPattern.put(
"
5
"
, TEN);
57
chineseMoneyPattern.put(
"
6
"
, HUNDRED);
58
chineseMoneyPattern.put(
"
7
"
, THOUSAND);
59
chineseMoneyPattern.put(
"
8
"
, HUNDRED_MILLION);
60
}
61
62
public
static
SimpleMoneyFormat getInstance()
63
{
64
if
(formatter
==
null
)
65
{
66
formatter
=
new
SimpleMoneyFormat();
67
}
68
return
formatter;
69
}
70
71
public
String format(String moneyStr)
72
{
73
checkPrecision(moneyStr);
74
String result;
75
result
=
convertToChineseNumber(moneyStr);
76
result
=
addUnitsToChineseMoneyString(result);
77
return
result;
78
}
79
80
public
String format(
double
moneyDouble)
81
{
82
return
format(numberFormat.format(moneyDouble));
83
}
84
85
public
String format(
int
moneyInt)
86
{
87
return
format(numberFormat.format(moneyInt));
88
}
89
90
public
String format(
long
moneyLong)
91
{
92
return
format(numberFormat.format(moneyLong));
93
}
94
95
public
String format(Number moneyNum)
96
{
97
return
format(numberFormat.format(moneyNum));
98
}
99
100
private
String convertToChineseNumber(String moneyStr)
101
{
102
String result;
103
StringBuffer cMoneyStringBuffer
=
new
StringBuffer();
104
for
(
int
i
=
0
; i
<
moneyStr.length(); i
++
)
105
{
106
cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i
+
1
)));
107
}
108
//
拾佰仟万亿等都是汉字里面才有的单位,加上它们
109
int
indexOfDot
=
cMoneyStringBuffer.indexOf(DOT);
110
int
moneyPatternCursor
=
1
;
111
for
(
int
i
=
indexOfDot
-
1
; i
>
0
; i
--
)
112
{
113
cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY
+
moneyPatternCursor));
114
moneyPatternCursor
=
moneyPatternCursor
==
8
?
1
: moneyPatternCursor
+
1
;
115
}
116
117
String fractionPart
=
cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf(
"
.
"
));
118
cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf(
"
.
"
), cMoneyStringBuffer.length());
119
while
(cMoneyStringBuffer.indexOf(
"
零拾
"
)
!=
-
1
)
120
{
121
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(
"
零拾
"
), cMoneyStringBuffer.indexOf(
"
零拾
"
)
+
2
, ZERO);
122
}
123
while
(cMoneyStringBuffer.indexOf(
"
零佰
"
)
!=
-
1
)
124
{
125
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(
"
零佰
"
), cMoneyStringBuffer.indexOf(
"
零佰
"
)
+
2
, ZERO);
126
}
127
while
(cMoneyStringBuffer.indexOf(
"
零仟
"
)
!=
-
1
)
128
{
129
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(
"
零仟
"
), cMoneyStringBuffer.indexOf(
"
零仟
"
)
+
2
, ZERO);
130
}
131
while
(cMoneyStringBuffer.indexOf(
"
零万
"
)
!=
-
1
)
132
{
133
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(
"
零万
"
), cMoneyStringBuffer.indexOf(
"
零万
"
)
+
2
, TEN_THOUSAND);
134
}
135
while
(cMoneyStringBuffer.indexOf(
"
零亿
"
)
!=
-
1
)
136
{
137
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(
"
零亿
"
), cMoneyStringBuffer.indexOf(
"
零亿
"
)
+
2
, HUNDRED_MILLION);
138
}
139
while
(cMoneyStringBuffer.indexOf(
"
零零
"
)
!=
-
1
)
140
{
141
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(
"
零零
"
), cMoneyStringBuffer.indexOf(
"
零零
"
)
+
2
, ZERO);
142
}
143
if
(cMoneyStringBuffer.lastIndexOf(ZERO)
==
cMoneyStringBuffer.length()
-
1
)
144
{
145
cMoneyStringBuffer.delete(cMoneyStringBuffer.length()
-
1
, cMoneyStringBuffer.length());
146
}
147
cMoneyStringBuffer.append(fractionPart);
148
149
result
=
cMoneyStringBuffer.toString();
150
return
result;
151
}
152
153
private
String addUnitsToChineseMoneyString(String moneyStr)
154
{
155
String result;
156
StringBuffer cMoneyStringBuffer
=
new
StringBuffer(moneyStr);
157
int
indexOfDot
=
cMoneyStringBuffer.indexOf(DOT);
158
cMoneyStringBuffer.replace(indexOfDot, indexOfDot
+
1
, YUAN);
159
cMoneyStringBuffer.insert(cMoneyStringBuffer.length()
-
1
, JIAO);
160
cMoneyStringBuffer.insert(cMoneyStringBuffer.length(), FEN);
161
if
(cMoneyStringBuffer.indexOf(
"
零角零分
"
)
!=
-
1
)
//
没有零头,加整
162
{
163
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(
"
零角零分
"
), cMoneyStringBuffer.length(),
"
整
"
);
164
}
165
else
if
(cMoneyStringBuffer.indexOf(
"
零分
"
)
!=
-
1
)
//
没有零分,不输出零分,也不加整
166
{
167
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(
"
零分
"
), cMoneyStringBuffer.length(),
""
);
168
}
169
else
if
(cMoneyStringBuffer.indexOf(
"
零角
"
)
!=
-
1
)
170
{
171
if
(cMoneyStringBuffer.indexOf(
"
零角
"
)
==
(cMoneyStringBuffer.length()
-
4
))
172
{
173
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(
"
零角
"
), cMoneyStringBuffer.indexOf(
"
零角
"
)
+
2
, ZERO);
174
}
175
else
176
{
177
cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf(
"
零角
"
), cMoneyStringBuffer.indexOf(
"
零角
"
)
+
2
);
178
}
179
}
180
result
=
cMoneyStringBuffer.toString();
181
return
result;
182
}
183
184
private
void
checkPrecision(String moneyStr)
185
{
186
int
fractionDigits
=
moneyStr.length()
-
moneyStr.indexOf(DOT)
-
1
;
187
if
(fractionDigits
>
2
)
188
{
189
throw
new
RuntimeException(
"
金额
"
+
moneyStr
+
"
的小数位多于两位。
"
);
//
精度不能比分低
190
}
191
}
192
193
public
static
void
main(String args[])
194
{
195
System.out.println(getInstance().format(
new
Double(
70052080.70
)));
196
}
197
}
198
posted on 2008-05-14 20:41
lzzzing
阅读(37)
评论(0)
编辑
收藏
引用