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

(¥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. 发布了一个基于jieba分词的ElasticSearch插件

    github地址: https://github.com/hongfuli/elasticsearch-analysis-jieba 基于 jieba 的 elasticsearch 中文分词插件. ...

  2. SCRUM 12.22

    周一,大家现在课程也比较少,今天都在非常努力地写代码. 任务分配如往常一样,我们现在基本将工作的重心放在完善已有的组件上. 成员 任务 彭林江 落实API 牛强 落实意见反馈功能测试 高雅智 测试已完 ...

  3. 《Linux内核分析》 期中总结

    Linux内核分析 期中总结 20135307 张嘉琪 一.Linux内核分析课程总结 学习笔记汇总 第一节 计算机是如何工作的 第二节 操作系统是如何工作的 第三节 构造一个简单的Linux系统Me ...

  4. NLP笔记:词向量和语言模型

    NLP问题如果要转化为机器学习问题,第一步是要找一种方法把这些符号数学化. 有两种常见的表示方法: One-hot Representation,这种方法把每个词表示为一个很长的向量.这个向量的维度是 ...

  5. selective search

    1.引言:图像的物体识别主要有两个步骤:定位.分类.在分类的过程中,需要对图像中文物体的区域划分出来.传统的方法是利用滑窗,一个窗口一个窗口得选择,将之与目标进行比较,确定物体的位置. 为了降低搜索空 ...

  6. Minimum Integer CodeForces - 1101A (思维+公式)

    You are given qq queries in the following form: Given three integers lili, riri and didi, find minim ...

  7. 探秘Java中的String、StringBuilder以及StringBuffer(转载)

    探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一 ...

  8. PHP加密与编码技术

    md5加密: string  md5( string $str [,bool $raw output=false]) md5加密方法用的挺多,有两个参数,第一个参数是要加密的字符串,第二个参数默认为f ...

  9. Oracle 通过触发器实现ID自增

    Oracle不像Mysql,SQLServer能够直接设置ID自增,但是可以通过触发器实现ID自增. 1 创建测试表 create table t_goods(id number primary ke ...

  10. [转帖]CR3,PDE,PTE,TLB 内存管理的简单说明

    CR3,PDE,PTE,TLB  Copy From https://www.cnblogs.com/zzSoftware/archive/2013/02/11/2908824.html   网上关于 ...