金额转换,阿拉伯数字的金额转换成中国传统的形式如:

(¥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 实现金额转换 代码示例的更多相关文章

  1. java基础之----java常见异常及代码示例

    概述 java中有两种错误类型,一个是Exception,一个是Error,都在java.lang包下,一般来说程序中的try...catch捕获的是Exception类型的异常,而Error类型的错 ...

  2. 完整的java字符串编码转换代码

    package book.String; import java.io.UnsupportedEncodingException; /** *//** * 转换字符串的编码 * @author joe ...

  3. java视频格式转换代码

    http://blog.163.com/zzf_fly/blog/static/20958915820127217443816/ package com.gkzx.online.action; imp ...

  4. java请求登录接口代码示例

    前言 近期研究如何利用java代码如何获取其他系统中所需的数据,自己总结的方法如下: 1.工具类代码 /** * <pre> * 方法体说明:向远程接口发起请求,返回字符串类型结果 * @ ...

  5. java进制转换代码

    定义十进制的数直接写,定义8进制的数以0开头,定义二进制的数以0b开头,定义十六进制的数以0x开头需要将十进制的数以二进制的数表示出来可以参照下例: int a = 10; System.out.pr ...

  6. java 数字金额转换中文金额

    public static String digitUppercase(double n){ String fraction[] = {"角", "分"}; S ...

  7. [置顶] think in java interview-高级开发人员面试宝典代码示例

    下载资源地址为: http://download.csdn.net/detail/lifetragedy/6379755 这是think in java interview中的代码示例,包括JAVA基 ...

  8. 使用XStream注解实现Java对象与XML互相转换的代码示例

    本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例.    我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等 ...

  9. 位置信息类API调用的代码示例合集:中国省市区查询、经纬度地址转换、POI检索等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 中国省市区查询:2017最新中国省市区地址 经纬度地址转换:经纬度 ...

随机推荐

  1. 使用odoo官方dockerfile 创建最新版镜像

    以odoo11.0为例 1.检出odoo/docker仓:git clone https://github.com/odoo/docker.git 2.打开目录 http://nightly.odoo ...

  2. (转)Xpath语法格式整理

    原文 经常在工作中会使用到XPath的相关知识,但每次总会在一些关键的地方不记得或不太清楚,所以免不了每次总要查一些零碎的知识,感觉即很烦又浪费时间,所以对XPath归纳及总结一下. 在这篇文章中你将 ...

  3. 手机端@media的屏幕适配

    @media only screen and (width: 320px) { html { font-size: 16px; }} @media only screen and (width: 36 ...

  4. 如何构造分层次的 Json 数据

    十年河东,十年河西,莫欺骚年穷...打错个字~_~ 现有如下需求,构造分层次的Json数据,层次结构类似下图: 上图使用EasyUI生成的,静态HTML如下: <html xmlns=" ...

  5. 【noi.ac】#309. Mas的童年

    #309. Mas的童年 链接 分析: 求$max \{sj + (s_i \oplus s_j)\}$ 因为$a + b = a \oplus b + (a \& b) \times 2$ ...

  6. 基于RC4加密算法的图像加密

    基于RC4加密算法的图像加密 某课程的一个大作业内容,对图像加密.项目地址:https://gitee.com/jerry323/RC4_picture 这里使用的是RC4(流.对称)加密算法,算法流 ...

  7. 系统、决策、控制研究系列(SSDC)

    本类目主要介绍的书籍来自springer的系列书籍中的一本,对于该系列书籍介绍如下: “系统.决策及控制研究”(SSDC)系列涵盖了在广泛认知的系统.决策及控制的各个领域的快速.最新和高质量的最新发展 ...

  8. Jmeter-使用Ultimate Thread Group插件来设置负载场景

    前言: Jmeter插件相关请移步:https://www.jianshu.com/p/130c7fddeddf 自定义线程组:jp@gc - Ultimate Thread Group,功能强大,可 ...

  9. 使用requests库提交multipart/form-data 格式的请求

    前言: Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库.它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求 ...

  10. Python_复习_习题_29

    # 之前做得的题 以后再遇到能保证会# 下周二考 :所有的知识# 面试题:认真对待## 三元运算符# 接收结果的变量 = 条件为真的结果 if 条件 else 条件为假的结果# 接收结果的变量 = “ ...