package app.pattern;
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* 还是有点小bug,超过1亿后就会出现小问题;
* 金额大小写转换工具类
* @author muyx
*/
public class FigureTransformUtil {
//金额大写数组,和数组下标对应
private static final String numberChineseUppercase[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
//金额单位
private static final String units[] = { "分", "角", "元", "", "拾", "百", "千", "万", "拾", "百", "千", "亿", "拾", "百", "千",
"万", "拾", "百", "千" };
private static final String pattern = "#,###.00";
private static final DecimalFormat decimalFormat = new DecimalFormat(pattern);
public static void main(String[] args) {
String[] testData = { /*"12", "12.01", "102.00", "102.01", "100,000", "102,002.46", "12,000,003,034.90",
*/"1230000000011111.45" };
for (int i = 0; i < testData.length; i++) {
System.out.println(toMoneyStyle(testData[i]));
System.out.println(toChineseUppercase(testData[i]));
}
}
public static String toMoneyStyle(double number) {
return decimalFormat.format(number);
}
public static String toMoneyStyle(String number) {
return toMoneyStyle(numberToBigDecimal(number).doubleValue());
}
public static String toChineseUppercase(String money) {
BigDecimal bigDecimal = numberToBigDecimal(money);
char[] charArray = bigDecimal.toString().toCharArray();
StringBuilder chineseUppercase = new StringBuilder();
String prefixZeroBuffer = "";
for (int i = 0, len = charArray.length; i < len; i++) {
//单位("分", "角", "元"....)数组的下标位置;
int unitLocation = len - i - 1;
if (charArray[i] != '.') {
int point = Integer.valueOf(charArray[i] + "");
if (point == 0) {
if (unitLocation == 7 || unitLocation == 11 || unitLocation == 15) {//无论怎么都不能少的处理
chineseUppercase.append(units[unitLocation]);
prefixZeroBuffer = "";
} else {
prefixZeroBuffer = numberChineseUppercase[point];
}
} else {
//当前位置不为0时,零的缓存+数字大写+单位
chineseUppercase.append(prefixZeroBuffer).append(numberChineseUppercase[point])
.append(units[unitLocation]);
prefixZeroBuffer = "";
}
} else {
chineseUppercase.append(units[unitLocation]);
prefixZeroBuffer = "";
}
}
return chineseUppercase.toString();
}
/**
* 格式检查,并转换成BigDecimal
*/
private static BigDecimal numberToBigDecimal(String moneyNumer) {
BigDecimal money = null;
moneyNumer = moneyNumer.trim().replaceAll(",", "");//替换千分位
if (moneyNumer.indexOf(".") == -1)
moneyNumer += ".00";
String regex = "[+|-]?\\d+(\\.{1}\\d{2})?";
if (moneyNumer.matches(regex) && (moneyNumer.length() - 1) < units.length) {
money = new BigDecimal(moneyNumer);
} else {
throw new RuntimeException("金额格式不正确");
}
return money;
}
}
分享到:
相关推荐
金额大小写转换工具
VB.NET编写的人民币大小写转换工具,实现小写转大写,大写转小写。
一款人民币中文大写金额和数字小写相互转换的小工具,可实现10的23次方以内的数字转换。
Java中关于金额小写转换为大写的工具类
(三)阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”, 万位、元位也是“0’,但千位、角位不是“0”时,中文大写金额中 可以只写一个零字,也可以不写“零”字。如¥1,680.32,应写成 人民币壹...
适用财务人员及与财务相关工作人员,对金额大小写的转换,需不需要大型软件的人员。
金额汉字数字转换工具金额汉字数字转换工具金额汉字数字转换工具金额汉字数字转换工具
人民币金额(数字)大小写转换 工具 人民币大写转换器( 将阿拉伯数字转换成中文大写、人民币大写转换工具) 输入小写数字金额: 显示中文大写金额: 数字转换大写工具
功能揪取:1200元转换为 壹仟贰佰元 AmountInWords(1200,x)= 壹仟贰佰元 其中x为 小数点后四舍五入的位数
金额小写转大写工具,正数负数都可以转换。
java编写的简单的单位换算工具 小应用程序,源代码及可执行程序,网页程序
本文实例为大家分享了python人民币大小写转换的具体代码,供大家参考,具体内容如下 大家应该都知道,银行打印账单有时候会跟上人民币的阿拉伯数字以及人民币汉字大写写法,转换的过程中有一定的逻辑难度,较为麻烦...
Android中数字转中文,金额转大写源码,支持口语化转换。
求数组中的最大值,求数组中的最小值,数组中的值求和,去除字符串中的空格(1-所有空格 2-前后空格 3-前空格 4-后空格),字符转换(1:首字母大写 2:首字母小写 3:大小写转换 4:全部大写 5:全部小写),检测...
9.增加了文字对象的文字对象名称属性,这样您就可以使多个对象保持相同的打印内容,在打印金额大小写之类的内容时更加方便。 10.增加了文字对象的调整文字间隔属性,现在您可以任意控制打印字间距了。 11.增加了文字...
本工具较同类转换工具准确率达100%。 【背景颜色】 提供可视化的可选择着色方式的背景着色功能,默认启用智能着色。 【文件批量改名】 功能完善的文件或图片批量改名工具。细分为<用数字顺序或倒序><用EXCEL存储格...
Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 实例001 输出“Hello World” 2 实例002 输出控制台传递的参数 2 实例003 输出由“*”组成的三角形 3 ...实例082 字符串大小写转换 1
票据金额大小写自动转换;票据日期大小写自动转换。 3、票据管理 票据流程化管理,购买、领用、报销、审核一条龙模式,高效、严谨、全自动化管理 4、票据查询 票据查询功能强大、查询结果列可自定义。不同的票夹、...
本工具较同类转换工具准确率达100%。 【背景颜色】 提供可视化的可选择着色方式的背景着色功能,默认启用智能着色。 【文件批量改名】 功能完善的文件或图片批量改名工具。细分为<用数字顺序或倒序><用EXCEL存储格...