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

面试题 相关文章推荐
JAVA和C++的区别
Oct 06 面试题
C++如何引用一个已经定义过的全局变量
Aug 25 面试题
几道数据库的概念性面试题
May 30 面试题
索引覆盖(Index Covering)查询含义
Feb 18 面试题
C#笔试题和英文面试题
Feb 07 面试题
EJB面试题
Jul 28 面试题
如何用Java实现列出某个目录下的所有子目录
Jul 20 面试题
Java文件和目录(IO)操作
Aug 26 面试题
介绍一下Java中的static关键字
May 12 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
Jul 06 面试题
J2EE面试题集锦(附答案)
Aug 16 面试题
下面代码从性能上考虑,有什么问题
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字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
PHP重载基础知识回顾
2020/09/10 PHP
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
Python 项目转化为so文件实例
2019/12/23 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
python3中for循环踩过的坑记录
2020/12/14 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
自我评价个人范文
2013/12/16 职场文书
主题酒店策划书
2014/01/28 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
有兼职工作经历的简历自我评价
2014/03/07 职场文书
股权转让协议书范本
2014/04/12 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
win10清理dns缓存
2022/04/19 数码科技