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最新中国省市区地址 经纬度地址转换:经纬度 ...
随机推荐
- [UWP 自定义控件]了解模板化控件(7):支持Command
以我的经验来说,要让TemplatedControl支持Command的需求不会很多,大部分情况用附加属性解决这个需求会更便利些,譬如UWPCommunityToolkit的HyperlinkExte ...
- E. Binary Numbers AND Sum
链接 [http://codeforces.com/contest/1066/problem/E] 题意 给你长度分别为n,m的二进制串,当b>0时,对a,b,&运算,然后b右移一位,把 ...
- What is 软件工程
话说新的一学期,有一门叫软件工程的专业课,作为计算机科学与技术专业的学生,在上课前有几个问题 1.软件工程顾名思义是学软件,可是软件这个词范围还是挺大的,那到底学的是哪方面,是编程?设计APP?还是一 ...
- 实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)
使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 攥写人:杨光 学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程 ...
- 《Linux内核设计与实现》读书笔记六
第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最 ...
- Python学习笔记 ---第三章
函数 函数是代码的一种抽象 函数 说明 abs 绝对值 max 最大值 hex 转换为16进制 强制数据类型转换 int('123') 123 int(12.35) 12 srt(100) '100' ...
- Leetcode——50.Pow(x, n)
@author: ZZQ @software: PyCharm @file: leetcode50_myPow.py @time: 2018/11/22 13:58 要求:实现 pow(x, n) , ...
- Odoo中连接mysql数据库
how to integrate Odoo with MySQL - Stack Overflowhttps://stackoverflow.com/questions/31959919/how-to ...
- Eclipse频繁崩溃问题待解决
---------------------------Eclipse---------------------------Java was started but returned exit code ...
- 配置Activiti Explorer使用MYSQL
http://blog.csdn.net/lxxxzzl/article/details/39583977