金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥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的五个基础面试题
Feb 26 面试题
一套带答案的C++笔试题
Jan 10 面试题
华为慧通面试题
Sep 11 面试题
描述内存分配方式以及它们的区别
Oct 15 面试题
数据库面试要点基本概念
Oct 31 面试题
如何转换一个字符串到enum值
Apr 12 面试题
广州盈通面试题
Dec 05 面试题
.NET初级开发工程师面试题
Apr 18 面试题
端口镜像是怎么实现的
Mar 25 面试题
Linux操作面试题
May 16 面试题
如何利用cmp命令比较文件
Sep 23 面试题
如何从一个文件档案的尾端新增记录
Dec 02 面试题
下面代码从性能上考虑,有什么问题
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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python线程中的同步问题及解决方法
2019/08/29 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
师范生实习自我鉴定
2013/11/01 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python