Java 实现金额转换 代码示例
金额转换,阿拉伯数字的金额转换成中国传统的形式如:
(¥1011)→(壹仟零壹拾壹元整)输出。
分析:
金额转换,在开发财务相关软件时会经常用到,也是软件本地化的一个需要。一般开发公司或者团队都有相应的金额转换类或者是模块,配合报表工具,可以实现良好的本地化。这里给出一个简单的金额转换代码,供读者参考。
1.
package programe;
2.
import java.text.NumberFormat;
3.
import java.util.HashMap;
4.
import java.util.Scanner;
5.
public class AmountOfConversion {
6. //定义HashMap的value值
7. public static final String EMPTY = "";
8. public static final String ZERO = "零";
9. public static final String ONE = "壹";
10. public static final String TWO = "贰";
11. public static final String THREE = "叁";
12. public static final String FOUR = "肆";
13. public static final String FIVE = "伍";
14. public static final String SIX = "陆";
15. public static final String SEVEN = "柒";
16. public static final String EIGHT = "捌";
17. public static final String NINE = "玖";
18. public static final String TEN = "拾";
19. public static final String HUNDRED = "佰";
20. public static final String THOUSAND = "仟";
21. public static final String TEN_THOUSAND = "万";
22. public static final String HUNDRED_MILLION = "亿";
23. public static final String YUAN = "元";
24. public static final String JIAO = "角";
25. public static final String FEN = "分";
26. public static final String DOT = ".";
27. private static AmountOfConversion formatter = null;
//创建AmountOfConversion的实例对象
28. //创建初始化一个HashMap对象
29. private HashMap NumberMap = new HashMap();
30. private HashMap HighnumberofMoney = new HashMap();
31. //创建初始化一个NumberFormat对象
32. private NumberFormat numberFormat =
NumberFormat.getInstance();
33. private AmountOfConversion() {
34. //在用new创建AmountOfConversion对象时,
为HashMap对象进行key-value的映射
35. numberFormat.setMaximumFractionDigits();
位
36. numberFormat.setMinimumFractionDigits();
位
37. numberFormat.setGroupingUsed(false);
/*设置此格式中是不可以使用组。如果设置可以使用组,
则数 1234567 可能被格式化为 "1,234,567"*/
38. NumberMap.put("0", ZERO);
39. NumberMap.put("1", ONE);
40. NumberMap.put("2", TWO);
41. NumberMap.put("3", THREE);
42. NumberMap.put("4", FOUR);
43. NumberMap.put("5", FIVE);
44. NumberMap.put("6", SIX);
45. NumberMap.put("7", SEVEN);
46. NumberMap.put("8", EIGHT);
47. NumberMap.put("9", NINE);
48. NumberMap.put(DOT, DOT);
49. HighnumberofMoney.put("1", TEN);
50. HighnumberofMoney.put("2", HUNDRED);
51. HighnumberofMoney.put("3", THOUSAND);
52. HighnumberofMoney.put("4", TEN_THOUSAND);
53. HighnumberofMoney.put("5", TEN);
54. HighnumberofMoney.put("6", HUNDRED);
55. HighnumberofMoney.put("7", THOUSAND);
56. HighnumberofMoney.put("8", HUNDRED_MILLION);
57. }
58. public static AmountOfConversion getInstance() {
//判断AmountOfConversion对象formatter是否初始化
59. if (formatter == null)
60. formatter = new AmountOfConversion();
61. return formatter;
62. }
63. //进行金额转换的多种数据类型
64. public String format(String moneyStr) {
65. String result = "不能进行金额转换!!";
66. if(isConversion(moneyStr)){
67. result = convertIntegerTochinese(moneyStr);
68. result = convertPointTochinese(result);
69. }
70. return result;
71. }
72. public String format(double moneyDouble) {
73. return format(numberFormat.format(moneyDouble));
74. }
75. public String format(int moneyInt) {
76. return format(numberFormat.format(moneyInt));
77. }
78. public String format(long moneyLong) {
79. return format(numberFormat.format(moneyLong));
80. }
81. public String format(Number moneyNum) {
82. return format(numberFormat.format(moneyNum));
83. }
84. private String convertIntegerTochinese(String moneyStr) {
//将参数中传入的阿拉伯数字转换成中文
85. String result;
86. StringBuffer C2CStrBufer = new StringBuffer();
87. ; i < moneyStr.length(); i++) {
88. C2CStrBufer.append(NumberMap.get(moneyStr.substring(
89. i, i + )));
90. }
91. // 拾佰仟万亿等都是汉字里面才有的单位,加上它们
92. int indexOfDot = C2CStrBufer.indexOf(DOT);
93. ;
94. ; i > ; i--) {
95. C2CStrBufer.insert(i, HighnumberofMoney.get(EMPTY
96. + moneyPatternCursor));
97. moneyPatternCursor = moneyPatternCursor == ?
98. : moneyPatternCursor + ;
99. }
100. String fractionPart = C2CStrBufer.substring(C2CStrBufer
101. .indexOf("."));
102. C2CStrBufer.delete(C2CStrBufer.indexOf("."),
103. C2CStrBufer.length());
104. ) {
105. C2CStrBufer.replace(C2CStrBufer.indexOf("零拾"),
106. C2CStrBufer.indexOf(, ZERO);
107. }
108. ) {
109. C2CStrBufer.replace(C2CStrBufer.indexOf("零佰"),
110. C2CStrBufer.indexOf(, ZERO);
111. }
112. ) {
113. C2CStrBufer.replace(C2CStrBufer.indexOf("零仟"),
114. C2CStrBufer.indexOf(, ZERO);
115. }
116. ) {
117. C2CStrBufer.replace(C2CStrBufer.indexOf("零万"),
118. C2CStrBufer.indexOf(, TEN_THOUSAND);
119. }
120. ) {
121. C2CStrBufer.replace(C2CStrBufer.indexOf("零亿"),
122. C2CStrBufer.indexOf(, HUNDRED_MILLION);
123. }
124. ) {
125. C2CStrBufer.replace(C2CStrBufer.indexOf("零零"),
126. C2CStrBufer.indexOf(, ZERO);
127. }
128. )
129. C2CStrBufer.delete(C2CStrBufer.length() - ,
130. C2CStrBufer.length());
131. C2CStrBufer.append(fractionPart);
132. result = C2CStrBufer.toString();
133. return result;
134. }
135. private String convertPointTochinese(String moneyStr) {
//对小数点后面的数字进行汉字处理
136. String result;
137. StringBuffer C2CStrBufer = new StringBuffer(moneyStr);
138. int indexOfDot = C2CStrBufer.indexOf(DOT);
139. C2CStrBufer.replace(indexOfDot, indexOfDot + , YUAN);
140. C2CStrBufer.insert(C2CStrBufer.length() - , JIAO);
141. C2CStrBufer.insert(C2CStrBufer.length(), FEN);
142. )// 没有零头,加整
143. C2CStrBufer.replace(C2CStrBufer.indexOf("零角零分"),
144. C2CStrBufer.length(), "整");
145. )// 没有零分,加整
146. C2CStrBufer.replace(C2CStrBufer.indexOf("零分"),
147. C2CStrBufer.length(), "整");
148. else {
149. )
150. C2CStrBufer.delete(C2CStrBufer.indexOf("零角"),
151. C2CStrBufer.indexOf();
152. }
153. result = C2CStrBufer.toString();
154. return result;
155. }
156. private boolean isConversion(String moneyStr) {
//判断参数传来的数据是否符合进行转换的条件
157. int fractionDigits = moneyStr.length() -
moneyStr.indexOf(DOT) - ;
158. boolean flag = true;
159. ){
160. System.out.println("金额" + moneyStr + "
的小数位多于两位。");
// 精度不能比分低
161. flag = false;
162. }
163. return flag;
164.
165. }
166. public static void main(String args[]) {
167. System.out.println("请输入金额数:");
168. Scanner scanner = new Scanner(System.in);
169. String str = scanner.next();
170. System.out.println("转换后的金额为:");
171. System.out.println(getInstance().format(new Double(str)));
172. }
}
Java 实现金额转换 代码示例的更多相关文章
- java基础之----java常见异常及代码示例
概述 java中有两种错误类型,一个是Exception,一个是Error,都在java.lang包下,一般来说程序中的try...catch捕获的是Exception类型的异常,而Error类型的错 ...
- 完整的java字符串编码转换代码
package book.String; import java.io.UnsupportedEncodingException; /** *//** * 转换字符串的编码 * @author joe ...
- java视频格式转换代码
http://blog.163.com/zzf_fly/blog/static/20958915820127217443816/ package com.gkzx.online.action; imp ...
- java请求登录接口代码示例
前言 近期研究如何利用java代码如何获取其他系统中所需的数据,自己总结的方法如下: 1.工具类代码 /** * <pre> * 方法体说明:向远程接口发起请求,返回字符串类型结果 * @ ...
- java进制转换代码
定义十进制的数直接写,定义8进制的数以0开头,定义二进制的数以0b开头,定义十六进制的数以0x开头需要将十进制的数以二进制的数表示出来可以参照下例: int a = 10; System.out.pr ...
- java 数字金额转换中文金额
public static String digitUppercase(double n){ String fraction[] = {"角", "分"}; S ...
- [置顶] think in java interview-高级开发人员面试宝典代码示例
下载资源地址为: http://download.csdn.net/detail/lifetragedy/6379755 这是think in java interview中的代码示例,包括JAVA基 ...
- 使用XStream注解实现Java对象与XML互相转换的代码示例
本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例. 我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等 ...
- 位置信息类API调用的代码示例合集:中国省市区查询、经纬度地址转换、POI检索等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 中国省市区查询:2017最新中国省市区地址 经纬度地址转换:经纬度 ...
随机推荐
- 使用odoo官方dockerfile 创建最新版镜像
以odoo11.0为例 1.检出odoo/docker仓:git clone https://github.com/odoo/docker.git 2.打开目录 http://nightly.odoo ...
- (转)Xpath语法格式整理
原文 经常在工作中会使用到XPath的相关知识,但每次总会在一些关键的地方不记得或不太清楚,所以免不了每次总要查一些零碎的知识,感觉即很烦又浪费时间,所以对XPath归纳及总结一下. 在这篇文章中你将 ...
- 手机端@media的屏幕适配
@media only screen and (width: 320px) { html { font-size: 16px; }} @media only screen and (width: 36 ...
- 如何构造分层次的 Json 数据
十年河东,十年河西,莫欺骚年穷...打错个字~_~ 现有如下需求,构造分层次的Json数据,层次结构类似下图: 上图使用EasyUI生成的,静态HTML如下: <html xmlns=" ...
- 【noi.ac】#309. Mas的童年
#309. Mas的童年 链接 分析: 求$max \{sj + (s_i \oplus s_j)\}$ 因为$a + b = a \oplus b + (a \& b) \times 2$ ...
- 基于RC4加密算法的图像加密
基于RC4加密算法的图像加密 某课程的一个大作业内容,对图像加密.项目地址:https://gitee.com/jerry323/RC4_picture 这里使用的是RC4(流.对称)加密算法,算法流 ...
- 系统、决策、控制研究系列(SSDC)
本类目主要介绍的书籍来自springer的系列书籍中的一本,对于该系列书籍介绍如下: “系统.决策及控制研究”(SSDC)系列涵盖了在广泛认知的系统.决策及控制的各个领域的快速.最新和高质量的最新发展 ...
- Jmeter-使用Ultimate Thread Group插件来设置负载场景
前言: Jmeter插件相关请移步:https://www.jianshu.com/p/130c7fddeddf 自定义线程组:jp@gc - Ultimate Thread Group,功能强大,可 ...
- 使用requests库提交multipart/form-data 格式的请求
前言: Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库.它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求 ...
- Python_复习_习题_29
# 之前做得的题 以后再遇到能保证会# 下周二考 :所有的知识# 面试题:认真对待## 三元运算符# 接收结果的变量 = 条件为真的结果 if 条件 else 条件为假的结果# 接收结果的变量 = “ ...