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

面试题 相关文章推荐
char型变量中能不能存贮一个中文汉字
Jul 08 面试题
请用用Java代码写一个堆栈
Jan 26 面试题
南京迈特望C/C++面试题
Jul 09 面试题
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
Aug 09 面试题
什么是网络协议
Apr 07 面试题
介绍一下MD5加密算法
Nov 12 面试题
Linux管理员面试题 Linux admin interview questions
Nov 01 面试题
介绍一下gcc特性
Oct 31 面试题
海量信息软件测试笔试题
Aug 08 面试题
ajax是什么及其工作原理
Feb 08 面试题
简单的JAVA编程面试题
Mar 19 面试题
shell的种类有哪些
Apr 15 面试题
下面代码从性能上考虑,有什么问题
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创建Cookie数组的详解
2013/07/03 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
Python中内建函数的简单用法说明
2016/05/05 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
工程业务员工作职责
2013/12/07 职场文书
小学教师国培感言
2014/02/08 职场文书
安全环保演讲稿
2014/08/28 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
喋血孤城观后感
2015/06/08 职场文书
男生贾里读书笔记
2015/06/30 职场文书
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android