金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥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...

面试题 相关文章推荐
如何将字串String转换成整数int
Feb 21 面试题
方法名是否可以与构造器的名字相同
Jun 04 面试题
ORACLE第二个十问
Dec 14 面试题
.net面试题
Dec 22 面试题
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
Dec 03 面试题
天网面试题
Apr 07 面试题
酷瑞网络科技面试题
Mar 30 面试题
系统管理员的职责包括那些?管理的对象是什么?
Jan 18 面试题
新媒传信软件测试面试题
Feb 24 面试题
软件测试工程师结构化面试题库
Nov 23 面试题
Python如何实现单例模式
Jun 03 面试题
Python面试题:Python是如何进行内存管理的
Aug 04 面试题
下面代码从性能上考虑,有什么问题
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中__get()和__set()的用法实例详解
2013/06/04 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
php的sso单点登录实现方法
2015/01/08 PHP
JavaScript 字符串乘法
2009/08/20 Javascript
基于jquery的滚动新闻列表
2010/06/19 Javascript
javascript中length属性的探索
2011/07/31 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python实现Const详解
2015/01/27 Python
浅谈Python 对象内存占用
2016/07/15 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
Python内存读写操作示例
2018/07/18 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python用什么编辑器进行项目开发
2020/06/17 Python
酷瑞网络科技面试题
2012/03/30 面试题
迟到检讨书1000字
2014/01/15 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
就业协议书的作用
2014/04/11 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
单位介绍信格式
2015/01/31 职场文书
逃课检讨书范文
2015/05/06 职场文书
《比尾巴》教学反思
2016/02/24 职场文书