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


Posted in 面试题 onMay 29, 2015
package test.format;
import java.text.NumberFormat;
import java.util.HashMap;
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);
chineseNumberMap.put(“3″, THREE);
chineseNumberMap.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 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 fractionPart = 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(fractionPart);

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);

Tags in this post...

面试题 相关文章推荐
说出ArrayList,Vector, LinkedList的存储性能和特性
Jan 04 面试题
面向对象编程的优势是什么
Dec 17 面试题
写一个方法1000的阶乘
Nov 21 面试题
递归计算如下递归函数的值(斐波拉契)
Feb 04 面试题
存储过程的优缺点是什么
Jan 10 面试题
如何实现一个自定义类的序列化
May 22 面试题
北京泡泡网网络有限公司.net面试题
Jul 17 面试题
Linux如何压缩可执行文件
Mar 27 面试题
软件测试笔试题
Oct 25 面试题
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
Apr 13 面试题
如何理解transaction事务的概念
May 27 面试题
WSDL的操作类型主要有几种
Jul 19 面试题
下面代码从性能上考虑,有什么问题
Apr 03 #面试题
什么是Web Service?
Jul 25 #面试题
写clone()方法时,通常都有一行代码,是什么?
Oct 31 #面试题
初始化了一个没有run()方法的线程类,是否会出错?
Mar 27 #面试题
是否可以从一个static方法内部发出对非static方法的调用?
Aug 18 #面试题
Java中会存在内存泄漏吗,请简单描述
Dec 22 #面试题
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
May 30 #面试题
You might like
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
php的dl函数用法实例
2014/11/06 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
python多线程扫描端口示例
2014/01/16 Python
python提示No module named images的解决方法
2014/09/29 Python
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
python面向对象法实现图书管理系统
2019/04/19 Python
Django异步任务线程池实现原理
2019/12/17 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
什么是数组名
2012/05/10 面试题
配置管理计划的主要内容有哪些
2014/06/20 面试题
预防传染病方案
2014/06/14 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年副班长工作总结
2014/12/10 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
Spring整合Mybatis的全过程
2021/06/28 Java/Android