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

(¥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. 蓝牙 link timeout分析

    蓝牙主机和蓝牙设备建立连接之后,会在l2cap 层面上建立相应的channel,这些channel 基本上是用于各种不同的profile 或者protocol 进行通信用的. 当相应的profile或 ...

  2. 生成线上用https证书,支持通配符和多域名,初学Let’s Encrypt用于IIS,纯本地手动

    自简书发布的上篇<生成本地测试用https证书,支持通配符和多域名,初学OpenSSL>以来,本地测试用https用的妥妥的. 线上一直用的腾讯云的免费证书(每个域名都要一个证书(滑稽), ...

  3. Slurm任务调度系统部署和测试(源码)(1)

    1. 概述1.1 节点信息2. 节点准备3. 部署NTP服务器4. 部署LDAP服务器5. 部署Munge认证服务6. 部署Mysql数据库服务7. 部署slurm7.1 创建slurm用户7.2 挂 ...

  4. jackjson-databind-2.9.3 笔记

    问题 客户端请求: {"skip":0,"take":10,"corpName":"","cityCode&q ...

  5. Python下操作Memcache/Redis/RabbitMQ说明

    一.MemcacheMemcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访 ...

  6. use_frameworks!和#use_frameworks!的区别、解决Swift项目中use_frameworks!冲突的问题

    use_frameworks!和#use_frameworks!的区别 转自:https://www.jianshu.com/p/0ae58a477459 1. 用cocoapods 导入swift ...

  7. Linux内核及分析 第一周 计算机是如何工作的?

    C语言代码: int g(int x) { return x + 5; } int f(int x) { return g(x); } int main(void) { return f(5) + 1 ...

  8. 《Linux内核分析》第八周学习笔记

    <Linux内核分析>第八周学习笔记 进程的切换和系统的一般执行过程 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163 ...

  9. Web接口测试-HttpClient

    要实现Web接口测试的自动化有许多方式,比如利用Jmeter.Loadrunner等测试工具都能够实现接口的自动化测试,我们也可以利用一些开源的框架来实现接口的自动化测试,比如我们现在要说的这个Htt ...

  10. 批处理-For详解

    大纲 一 前言 二 for语句的基本用法 三 for /f (delims.tokens.skip.eol.userbackq.变量延迟) 四 for /r (递归遍历) 五 for /d (遍历目录 ...