留个纪念。这个类主要用于将数字金额转换成中文大写金额,提供了三个方法:

  • toDX(double val)
  • toDX(String val)
  • toDX(int val)

使用方法

AmtInWords.getIns().toDX(val);

import java.text.DecimalFormat;/*** The <code>AmtInWords</code> class is used to convert the * amount of the amount to the capital amount.The amount is* accurate to two decimal numbers.The maximum range is one * trillion.For example: * <p><blockquote><pre> *    How "10,001.11" convert to "壹万零壹元壹角壹分" ?*    String amt = "10,001";*    String result = AmtInWords.getIns().toDX(amt);* </pre></blockquote></p>* * @author zou_bbei* @version 1.0*/public class AmtInWords {/** The hungry man type single model */private static AmtInWords ins = new AmtInWords();/** Prevent new object */private AmtInWords(){}/** get a {@code AmtInWords} instance by the single*/public static AmtInWords getIns(){return ins;}/*** Receive the {@code String} type of {@code val}.* Return the {@code String} type Chinese capital amount.* @param val* @return*/public String toDX(String val){if(checkIsNull(val)){return cont.ZERO.get()+cont.YUAN.get()+cont.ZHENG.get();}val = val.replace(",", "");     val = convert(val);return val;}/*** Receive the {@code double} type of {@code val}.* Return the {@code String} type Chinese capital amount.* @param val* @return*/public String toDX(double val){ DecimalFormat df = new DecimalFormat("0.00"); return toDX(df.format(val));}/*** Receive the {@code int} type of {@code val}.* Return the {@code String} type Chinese capital amount.* @param val* @return*/public String toDX(int val){return toDX(String.valueOf(val));}/*******************************************************//*****************private method***********************//******************************************************//*** The <code>convert</code> method is the core * method of conversion.* Divide the amount into two parts: integers and decimal parts.* @param val* @return*/private String convert(String val) {//check nullif(checkIsNull(val)){return cont.ZERO.get()+cont.YUAN.get()+cont.ZHENG.get();}String ret = "";//the return valueString[] temp = null;String integers = "";//the integers partString decimals = "";//the decimal part//If has decimal partif(val.contains(".")){temp = val.split("\\.");integers = temp[0];decimals = temp[1];}else{integers = val;}//The integers conversionintegers = convertInt(integers);//The decimal conversiondecimals = convertDec(decimals);ret = getDX(integers, decimals);return ret;}/*** Get a Chinese capital amount* @param integers*      integral part value* @param decimals*      decimal part value* @return*/private String getDX(String integers, String decimals) {String ret = "";if(checkIsNull(integers) && checkIsNull(decimals)){         ret = cont.ZERO.get()+cont.YUAN.get()+cont.ZHENG.get();}else if(!checkIsNull(integers) && checkIsNull(decimals)){//The decimal conversionret = integers + cont.YUAN.get() + cont.ZHENG.get();}else if(checkIsNull(integers) && !checkIsNull(decimals)){ret = decimals.indexOf(cont.ZERO.get()) == 0?decimals.substring(1, decimals.length()):decimals;}else{ret = integers + cont.YUAN.get() + decimals;}return ret;}/**>>>>>>>>Decimal part processing logic>>>>>>>>>>>>>>>>>**//*** Decimal part conversion, only limited to two decimal.* @param dec* @return*/private String convertDec(String dec) {if(checkIsNull(dec)){           return "";}char[] decs = dec.toCharArray();//conversionString jiao = jiaoAndFen(decs[0], 0);String fen = jiaoAndFen(decs[1], 1);//split jointString zero = cont.ZERO.get();if(zero.equals(jiao) && zero.equals(fen)){          return "";}else if(!zero.equals(jiao) && zero.equals(fen) ){dec = jiao;}else{dec = jiao + fen;}return dec;}/*** The <code>jiaoAndFen</code> method is used for* the conversion of jiao and fen.* <p>if flag == 0, for jiao</p> * <p>if flag == 1, for fen</p>* @param c* @return*/private String jiaoAndFen(char c,int flag) {String ret = "";String unit = "";if(0 == flag){unit = cont.JIAO.get();}else{unit = cont.FEN.get();}switch(c){case '0':ret = cont.ZERO.get();break;case '1':ret = cont.ONE.get() + unit;break;case '2':ret = cont.TWO.get() + unit;break;case '3':ret = cont.THREE.get() + unit;break;case '4':ret = cont.FOUR.get() + unit;break;case '5':ret = cont.FIVE.get() + unit;break;case '6':ret = cont.SIX.get() + unit;break;case '7':ret = cont.SEVEN.get() + unit;break;case '8':ret = cont.EIGHT.get() + unit;break;case '9':ret = cont.NINE.get() + unit;break;}return ret;}/**<<<<<<<<<<<Decimal part processing logic<<<<<<<<<<<<<<<<**//**>>>>>>>>>>Integer part processing logic>>>>>>>>>>>>>>>>>**//*** Integers part conversion.* @param integers* @return*/private String convertInt(String integers) {//the return valueStringBuffer ret = new StringBuffer();char[] integerss = integers.toCharArray();int digit = 0;//the range : 0~10,000int zeros_0 = 0;StringBuffer val_0 = new StringBuffer();//the range : 10,000~100,000,000int zeros_1 = 0;StringBuffer val_1 = new StringBuffer();//the range : 100,000,000~1000,000,000,000int zeros_2 = 0;StringBuffer val_2 = new StringBuffer();//the range : 1000,000,000,000~10^17int zeros_3 = 0;StringBuffer val_3 = new StringBuffer();for(int i = integerss.length; i>0; i--){digit++;char c_num = integerss[i-1];//get numberif(digit < 5){if('0' == c_num){zeros_0++;continue;}val_0 = join(val_0, c_num, digit, zeros_0);zeros_0 = 0;//resetting}if(digit >= 5 && digit < 9){if('0' == c_num){zeros_1++;continue;}val_1 = join(val_1, c_num, digit, zeros_1);zeros_1 = 0;}if(digit >= 9 && digit < 13){if('0' == c_num){zeros_2++;continue;}val_2 = join(val_2, c_num, digit, zeros_2);zeros_2 = 0;}if(digit >= 13 && digit < 17){if('0' == c_num){zeros_3++;continue;}val_3 = join(val_3, c_num, digit, zeros_3);zeros_3 = 0;}}val_0 = deleteZero(val_0);if(val_1.length() > 0){ val_1 = deleteZero(val_1);val_1.append(!checkIsNull(val_0.toString()) && zeros_0 != 0 ?cont.WL.get():cont.W.get());}if(val_2.length() > 0){val_2 = deleteZero(val_2);val_2.append((!checkIsNull(val_0.toString()) && checkIsNull(val_1.toString()))|| (!checkIsNull(val_1.toString()) && zeros_1 != 0)? cont.YL.get(): cont.Y.get());}if(val_3.length() > 0){ val_3 = deleteZero(val_3);val_3.append(((!checkIsNull(val_0.toString()) || !checkIsNull(val_1.toString())) && checkIsNull(val_2.toString()))|| (!checkIsNull(val_2.toString()) && zeros_2 != 0)? cont.ZL.get(): cont.Z.get());}ret.append(val_3).append(val_2).append(val_1).append(val_0);return ret.toString();}/*** Delete superfluous zero* @param val* @return*/private StringBuffer deleteZero(StringBuffer val) {if(val.length() == 0){return val;}int big = val.length()-1;if(val.lastIndexOf(cont.ZERO.get()) == val.length()-1 ){val =new StringBuffer(val.toString().substring(0, big));}return val;}/*** Splice return value* * @param val*      the return value* @param c_num*      char type numbers* @param digit*      the digit* @param zeros*      the number of zero* @return*/private StringBuffer join(StringBuffer val,char c_num, int digit, int zeros){StringBuffer sb = new StringBuffer(spliceIntegers(c_num, digit, zeros));val = sb.append(val);return val;}/*** splice integers * * @param c_num*      char type numbers* @param digit*      the digit* @param zeros*      the number of zero* @return*/private String spliceIntegers(char c_num, int digit, int zeros) {String ret = "";ret = numToDX(c_num);ret += appendDW(digit);ret += appendZERO(zeros);return ret;}/*** Add Chinese zero* * @param zeros*      the number of zero* @return*/private String appendZERO(int zeros) {String ret = "";if(zeros != 0){ret = cont.ZERO.get();}return ret;}/*** Add Chinese digit* * @param digit* @return*/private String appendDW(int digit) {String ret = "";switch(digit){case 1:break;case 2:case 6:case 10:ret = cont.TEN.get();break;case 3:case 7:case 11:ret = cont.B.get();break;case 4:case 8:case 12:ret = cont.Q.get();break;}return ret;}/*** Add Chinese number* * @param c_num* * @return*/private String numToDX(char c_num) {String ret = "";switch(c_num){case '1':ret = cont.ONE.get();break;case '2':ret = cont.TWO.get();break;case '3':ret = cont.THREE.get();break;case '4':ret = cont.FOUR.get();break;case '5':ret = cont.FIVE.get();break;case '6':ret = cont.SIX.get();break;case '7':ret = cont.SEVEN.get();break;case '8':ret = cont.EIGHT.get();break;case '9':ret = cont.NINE.get();break;}return ret;}/**<<<<<<<<<<<<<Integer part processing logic<<<<<<<<<<<<<**//*** constant* * @author zou_bbei**/private enum cont{ZERO("零"),ONE("壹"),TWO("贰"),THREE("叁"),FOUR("肆"),FIVE("伍"),SIX("陆"),SEVEN("柒"),EIGHT("捌"),NINE("玖"),TEN("拾"),B("佰"),Q("仟"),W("万"),WL("万零"),Y("亿"),YL("亿零"),Z("兆"),ZL("兆零"),FEN("分"),JIAO("角"),ZHENG("整"),YUAN("元");private String context;private cont(String context){this.context = context;}public String get(){return context;}}/*** Check null. If is null, return {@code true}.* If not is null, return {@code false} * @param val* @return*/private boolean checkIsNull(String val){return val == null || "".equals(val);}}

金额转换成中文大写金额相关推荐

  1. c#金额转换成中文大写金额

    c#金额转换成中文大写金额 原文:c#金额转换成中文大写金额 2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary>/// 金额转换成中文大写金额/// &l ...

  2. 【C语言】小写数字金额转换成中文大写金额

    1. 更新说明 添加与 "零圆整" 等价的预先判断 (0 / 0. / 0.0 / 0.00 / . / .0 / .00) 修复了因使用函数 strdup 导致的内存泄漏 除去输 ...

  3. java中数字格式金额转换成中文大写金额工具类

    /*** 金额转换工具类*/ public class MoneyUtils {private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分&quo ...

  4. 阿拉伯数字小写金额转换成中文大写金C额程序说明

    阿拉伯数字小写金额转换成中文大写金额C程序说明 1.问题的提出 寒假帮同学交缴话费时,不经意间看到收据上同时有小写金额和大写金额,想想各种各样的票据诸如缴费收据.银行业务回单.商场销售凭证.专用发票等 ...

  5. 将阿拉伯数字转换成中文大写金额的形式

    问题:编写控制台程序,用户输入阿拉伯数字的金额,系统自动转换成中文大写金额的形式输出. 例如:输入458796: 转换为:肆拾伍万捌仟柒佰玖拾陆. 问题分析:既然是数字大小写转换,那么我们这样考虑问题 ...

  6. win7计算机名改成大写,图文解读win7系统excel数字小写金额转换成汉字大写金额的措施...

    有很多网友在使用电脑的过程总难免会遇到win7系统excel数字小写金额转换成汉字大写金额的情况.针对win7系统excel数字小写金额转换成汉字大写金额的问题,我给大家整理总结了详细的解决步骤.近日 ...

  7. 如何把数字金额转换成中文大写

    问题:要求把万亿级别内的浮点数转换成中文大写,例如把数字1112221000060.254400转换成:壹万壹仟壹佰贰拾贰亿贰仟壹佰万零陆拾元零贰角伍分 分析:关键是先把double类型转换成char ...

  8. 把数字金额转换成中文大写数字

    //把数字金额转换成中文大写数字 function changeNumMoneyToChinese(money) { var cnNums = new Array("零", &qu ...

  9. php显示大写金额,PHP数字金额转换成中文大写显示

    整个功能其实不难,只是还算挺实用,所以记一下哈,其他编程语言转换一下也是能可以的! 思路:把传过来的金额转换成整数和小数两部分,再对其分别进行转换处理 代码附上: function moneyToSt ...

最新文章

  1. VirtualBox下安装rhel5.5 linux系统
  2. Image Generation
  3. Windows 2003 server 服务器集群实例
  4. javascript array sort()
  5. 微任务与宏任务与eventloop
  6. 什么是网络光纤收发器?
  7. MATLAB报错Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image
  8. thinkphp3.2.3 自动验证 正则验证
  9. CGLib与JDK的动态代理
  10. 深入浅出MFC - C++ 重要性质
  11. 【SpringBoot_ANNOTATIONS】组件注册 01 @Configuration @Bean
  12. MySql中PreparedStatement对象与Statement对象
  13. [转]22条经典的编程引言
  14. arcgis拓扑与修复
  15. DOS命令关机小程序
  16. k线顶分型 python_顶分型K线形态形态特征及操作要领
  17. 软件工程 阶段测试三
  18. 判断某日是一年中的第几天
  19. 查询加日期oracle,Oracle查询优化日期运算实例详解
  20. 软件工程第五章——总体设计

热门文章

  1. 05-图像分类(含有3700张鲜花照片的数据集)
  2. 大数据在电力行业的应用案例100讲(五)-基于STS标准规范的代码式预付费电表
  3. redhat安装中文字体
  4. Self-Attentive 基于自注意力分类的非结构化日志异常检测
  5. 分布式事务系列三:Saga
  6. 星际战甲结合扫描目标位置
  7. android qq功能实现原理,Android QQ、微信聊天消息界面设计原理与实现
  8. IT架构师_隽语集(Vision _0401)
  9. 苹果系统广讯通服务器,广讯通怎么设置服务器地址
  10. Postman的安装使用及填坑心得