金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-(一千零一拾一元整)输出。...

程序代码如下:

package cn.itcast.framework.interview;import java.text.NumberFormat;
import java.util.HashMap;//金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
public class SimpleMoneyFormat {public static final String EMPTY = "";public static final String ZERO = "零";public static final String ONE = "壹";public static final String TWO = "贰";public static final String THREE = "叁";public static final String FOUR = "肆";public static final String FIVE = "伍";public static final String SIX = "陆";public static final String SEVEN = "柒";public static final String EIGHT = "捌";public static final String NINE = "玖";public static final String TEN = "拾";public static final String HUNDRED = "佰";public static final String THOUSAND = "仟";public static final String TEN_THOUSAND = "万";public static final String HUNDRED_MILLION = "亿";public static final String YUAN = "元";public static final String JIAO = "角";public static final String FEN = "分";public static final String DOT = ".";private static SimpleMoneyFormat formatter = null;private HashMap chineseNumberMap = new HashMap();private HashMap chineseMoneyPattern = new HashMap();private NumberFormat numberFormat = NumberFormat.getInstance();private SimpleMoneyFormat(){numberFormat.setMaximumFractionDigits(4);numberFormat.setMinimumFractionDigits(2);numberFormat.setGroupingUsed(false);chineseNumberMap.put("0", ZERO);chineseNumberMap.put("1", ONE);chineseNumberMap.put("2", TWO);chineseMoneyPattern.put("3", THREE);chineseMoneyPattern.put("4", FOUR);chineseNumberMap.put("5", FIVE);chineseNumberMap.put("6", SIX);chineseNumberMap.put("7", SEVEN);chineseNumberMap.put("8", EIGHT);chineseNumberMap.put("9", NINE);chineseNumberMap.put(DOT, DOT);chineseMoneyPattern.put("1", TEN);chineseMoneyPattern.put("2", HUNDRED);chineseMoneyPattern.put("3", THOUSAND);chineseMoneyPattern.put("4", TEN_THOUSAND);chineseMoneyPattern.put("5", TEN);chineseMoneyPattern.put("6", HUNDRED);chineseMoneyPattern.put("7", THOUSAND);chineseMoneyPattern.put("8", HUNDRED_MILLION);}public static SimpleMoneyFormat getInstance(){if(formatter == null){formatter = new SimpleMoneyFormat();}return formatter;}public String format(String moneyStr){checkPrecision(moneyStr);String result;result = convertToChineseNumber(moneyStr);result = addUnitsToChineseMoneyString(result);return result;}public String format(double moneyDouble){return format(numberFormat.format(moneyDouble));}public String format(int moneyInt){return format(numberFormat.format(moneyInt));}public String format(long moneyLong){return format(numberFormat.format(moneyLong));}public String format(Number moneyNum){return format(numberFormat.format(moneyNum));}private String convertToChineseNumber(String moneyStr){String result;StringBuffer cMoneyStringBuffer = new StringBuffer();for (int i = 0; i < moneyStr.length(); i++) {cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i+1)));}//拾佰仟万亿等都是汉字里面才有的单位,加上它们int indexOfDot = cMoneyStringBuffer.indexOf(DOT);int moneyPatternCursor = 1;for(int i=indexOfDot-1;i>0;i--){cMoneyStringBuffer.insert(i,chineseMoneyPattern.get(EMPTY+moneyPatternCursor));moneyPatternCursor = moneyPatternCursor == 8?1:moneyPatternCursor+1;}String fractionPat = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."));cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."),cMoneyStringBuffer.length());while(cMoneyStringBuffer.indexOf("零拾")!=-1){cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"), cMoneyStringBuffer.indexOf("零拾")+2, ZERO);}while (cMoneyStringBuffer.indexOf("零佰") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"), cMoneyStringBuffer.indexOf("零佰") + 2, ZERO);}while (cMoneyStringBuffer.indexOf("零仟") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"), cMoneyStringBuffer.indexOf("零仟") + 2, ZERO);}while (cMoneyStringBuffer.indexOf("零万") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"), cMoneyStringBuffer.indexOf("零万") + 2, TEN_THOUSAND);}while (cMoneyStringBuffer.indexOf("零亿") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"), cMoneyStringBuffer.indexOf("零亿") + 2, HUNDRED_MILLION);}while (cMoneyStringBuffer.indexOf("零零") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"), cMoneyStringBuffer.indexOf("零零") + 2, ZERO);}if(cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length()-1)cMoneyStringBuffer.delete(cMoneyStringBuffer.length()-1, cMoneyStringBuffer.length());cMoneyStringBuffer.append(fractionPat);result = cMoneyStringBuffer.toString();return result;}private String addUnitsToChineseMoneyString(String moneyStr){String result;StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);int indexOfDot = cMoneyStringBuffer.indexOf(DOT);cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN);cMoneyStringBuffer.insert(cMoneyStringBuffer.length() - 1, JIAO);cMoneyStringBuffer.insert(cMoneyStringBuffer.length(), FEN);if (cMoneyStringBuffer.indexOf("零角零分") != -1)//没有零头,加整cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角零分"), cMoneyStringBuffer.length(), "整");elseif (cMoneyStringBuffer.indexOf("零分") != -1)//没有零分,加整cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零分"), cMoneyStringBuffer.length(), "整");else {if(cMoneyStringBuffer.indexOf("零角")!=-1)cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("零角"),cMoneyStringBuffer.indexOf("零角")+2);// tmpBuffer.append("整");}result = cMoneyStringBuffer.toString();return result;}private void checkPrecision(String moneyStr){int fractionDigits = moneyStr.length()-moneyStr.indexOf(DOT)-1;if(fractionDigits>2)throw new RuntimeException("金额"+moneyStr+"的小数位多于两位。");//精度不能比分低}public static void main(String [] args){System.out.println(getInstance().format(new Double(100100001.01)));}}
结果如下:
壹亿零壹拾万零壹元壹分



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大学四年自学进BAT,私下存的资源/工具/网站我全贡献出来了

这些工具/网站是我横扫BAT的重要一步&#xff0c;甚至是决定性的一步。以后会更简历书写、面试笔试、大学学习、工具等文章。 大学四年&#xff0c;上课是不可能一直上课的&#xff0c;看课本也是不可能一直看课本的。 不是说老师教的不好&#xff0c;教材写的不好&#xff0c…

我是CSDN最硬核作者,谁赞成,谁反对?

也许是现在&#xff0c;也许是未来&#xff0c;我是全网最硬核的作者&#xff0c;最值得爱学习爱编程的崽崽们关注的作者。 一、介绍自己 哈喽大家好&#xff0c;我是兔老大&#xff0c;之前叫过兔兔兔兔兔兔、兔兔RabbitMQ等&#xff0c;反正都是兔子啦&#xff0c;自从大学…

当年,学姐总结奇安信18k常问面试题

她确实拿了18k&#xff0c;真人真事&#xff0c;也不是很高&#xff0c;我没必要编。 黑色字为问题&#xff0c;红色字为答案&#xff0c;空行为一个面试过程 自我介绍 家在哪&#xff0c;工作地 测试需要掌握啥 V模型W模型 最典型的V模型版本一般会在其开始部分对软件开发…

最强阿里巴巴历年经典面试题汇总:C++研发岗

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 本系列历史文章&#xff1a; 关于我的那些面经——百度后端&#xff08;附答案&#xff09; 《关于我的那些面经》滴滴Java岗&#xff08;附答案&#xff09; 朋…

当年,兔子学姐靠这个面试小抄拿了个22k

本文顺序是操作系统&#xff08;jvm&#xff09;、网络、数据库&#xff08;mysql/redis&#xff09;&#xff0c;都是当时兔子的学姐准备面试的时候总结的&#xff0c;学生面试基本不会跑出这个范围&#xff0c;懂行的应该能看出来。 学姐原话&#xff1a;因为我本身的知识是A…

用JAVA SOCKET编程,读服务器几个字符,再写入本地显示

Server: package cn.itcast.framework.socket;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket;//用JAVA SOCKET编程&#xff0c;读服务器…

学姐,来挑战字节最牛部门

字节&#xff08;分布式图数据库研发工程师&#xff09;真实面经&#xff0c;其实是个学长&#xff0c;但是同学们都叫他学姐&#xff0c;可能是因为帅到把女生都比下去了。 本系列历史文章&#xff1a; 最强阿里巴巴历年经典面试题汇总&#xff1a;C研发岗 关于我的那些面经…

学姐百度实习面经(轻松拿offer)

本系列历史文章&#xff1a; 学姐&#xff0c;来挑战字节最牛部门 最强阿里巴巴历年经典面试题汇总&#xff1a;C研发岗 关于我的那些面经——百度后端&#xff08;附答案&#xff09; 《关于我的那些面经》滴滴Java岗&#xff08;附答案&#xff09; 朋友面神策数据库&am…

阿里巴巴历年经典面试题汇总:Java岗

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 本系列历史文章&#xff1a; 学姐百度实习面经 学姐&#xff0c;来挑战字节最牛部门 最强阿里巴巴历年经典面试题汇总&#xff1a;C研发岗 关于我的那些面经—…

超经典,阿里巴巴历年高频面试题汇总:前端岗

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 本系列历史文章&#xff1a; 阿里巴巴历年经典面试题汇总&#xff1a;Java岗 学姐百度实习面经 学姐&#xff0c;来挑战字节最牛部门 最强阿里巴巴历年经典面试…

超经典,百度最爱考的安卓Android百题

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 本系列历史文章&#xff1a; 超经典&#xff0c;阿里巴巴历年高频面试题汇总&#xff1a;前端岗 阿里巴巴历年经典面试题汇总&#xff1a;Java岗 学姐百度实习面…

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

今天在写jbpm获取流程变量的时候出现了这个异常&#xff1a;org.hibernate.LazyInitializationException: could not initialize proxy - no Session 原因就是jbpm的底层采用了懒加载的方式&#xff0c;解决这个异常的方法就是在对象的映射文件中去掉默认的懒加载&#xff0c;例…

最容易进的大厂工作,百度经典百题

最容易进大厂的机会就是百度的测试&#xff0c;不服来辩。 这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 本系列历史文章&#xff1a; 超经典&#xff0c;百度最爱考的安卓Android百题 超经典&#xff0c;阿…

超硬核!兔兔阿里p7学长给的面试知识库

一个阿里p7学长给的nosql面试知识库&#xff0c;绝对真实&#xff0c;学会了去面呀。 最近整理了一下超硬核系列的文章和面经系列的文章&#xff0c;可以持续关注下&#xff1a; 超硬核系列历史文章&#xff1a;&#xff08;我保证每篇文章都有值得学习的地方&#xff0c;并…

百度校园招聘历年经典面试题汇总:C++研发岗

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 这个系列离结束差的还特别多&#xff0c;会更新涵盖所有一线大厂的所有岗位&#xff0c;也可以关注一下。 最容易进的大厂工作&#xff0c;百度经典百题 超经典&…

百度校招历年经典面试题汇总:Java开发岗

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 这个系列离结束差的还特别多&#xff0c;会更新涵盖所有一线大厂的所有岗位&#xff0c;也可以关注一下。 百度校园招聘历年经典面试题汇总&#xff1a;C研发岗 …

京东华为 Java开发历年经典题汇总

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 这个系列离结束差的还特别多&#xff0c;会更新涵盖所有一线大厂的所有岗位&#xff0c;也可以关注一下。 百度校招历年经典面试题汇总&#xff1a;Java开发岗 百…

13个mysql数据库的实用SQL小技巧

MYSQL作为最成功的开源关系型数据库之一&#xff0c;拥有大批的粉丝&#xff08;本人也是&#xff09;&#xff0c;在这篇文章中&#xff0c;我们精心收集了10个最实用的mysql查询技巧&#xff0c;希望能够带给大家惊喜&#xff0c;如果大家也有非常不错的SQL&#xff0c;请留言…

今日头条校园招聘历年经典面试题汇总:C++研发岗

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 这个系列离结束差的还特别多&#xff0c;会更新涵盖所有一线大厂的所有岗位&#xff0c;也可以关注一下。 京东&华为 Java开发历年经典题汇总 百度校招历年经…

腾讯校招历年经典面试汇总:C++研发岗

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 这个系列离结束差的还特别多&#xff0c;会更新涵盖所有一线大厂的所有岗位&#xff0c;也可以关注一下。 今日头条校园招聘历年经典面试题汇总&#xff1a;C研发…