金额大写转换
来源:互联网 发布:java web开发是什么 编辑:程序博客网 时间:2024/04/28 00:43
import icesnow.exception.DataConvertException;import java.util.Arrays;
public class MoneyConvert{
private static char[] UPPERCHAR = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
private static char[] GROUPUNIT = {'元','万','亿','兆'};
private static char[] INTUNIT = {'拾','佰','千'};
private static char[] DECIUNIT = {'角','分','厘','毫'};
private static int GROUPLENGTH = 4;
private static char[] GROUPUNIT = {'元','万','亿','兆'};
private static char[] INTUNIT = {'拾','佰','千'};
private static char[] DECIUNIT = {'角','分','厘','毫'};
private static int GROUPLENGTH = 4;
/**
* 金额转换为大写
*/
public String convert(Double money){
String[] m;
char[] string = money.toString().toCharArray();
int ind = StringUtil.search(string,'.');
if(ind > -1){
m = new char[][]{Arrays.copyOfRange(string,0,ind),Arrays.copyOfRange(string,ind + 1,string.length)};
}else{
m = new char[][]{string};
}
int intLength = m[0].length();
if(intLength > GROUPUNIT.length * GROUPLENGTH){
throw new DataConvertException("整数部分超出处理范围,最多支持" + GROUPUNIT.length * GROUPLENGTH + "位小数。");
}
int decLength = 0;
if(m.length > 0){
decLength = m[1].length();
if(decLength > 4){
throw new DataConvertException("小数部分超出处理范围,最多支持4位小数。");
}
}
int gCount = Util.groupCount(intLength,GROUPLENGTH);
char[] src = toUpperChar(m[0].toCharArray());
char[][] tem = group(src,gCount);
StringBuilder sb = new StringBuilder(intLength + gCount + decLength);
if(money < 0){
sb.append("负");
}
char[] mu = new char[4];
System.arraycopy(INTUNIT,0,mu,1,3);
for(int i = tem.length;i > 0;i--){
mu[0] = GROUPUNIT[i - 1];
sb.append((intUnit(tem[i - 1],mu)));
}
if(m.length > 1){
char[] cs = toUpperChar(m[1].toCharArray());
sb.append((decUnit(cs,DECIUNIT)));
}else{
sb.append("整");
}
return sb.toString();
}
* 金额转换为大写
*/
public String convert(Double money){
String[] m;
char[] string = money.toString().toCharArray();
int ind = StringUtil.search(string,'.');
if(ind > -1){
m = new char[][]{Arrays.copyOfRange(string,0,ind),Arrays.copyOfRange(string,ind + 1,string.length)};
}else{
m = new char[][]{string};
}
int intLength = m[0].length();
if(intLength > GROUPUNIT.length * GROUPLENGTH){
throw new DataConvertException("整数部分超出处理范围,最多支持" + GROUPUNIT.length * GROUPLENGTH + "位小数。");
}
int decLength = 0;
if(m.length > 0){
decLength = m[1].length();
if(decLength > 4){
throw new DataConvertException("小数部分超出处理范围,最多支持4位小数。");
}
}
int gCount = Util.groupCount(intLength,GROUPLENGTH);
char[] src = toUpperChar(m[0].toCharArray());
char[][] tem = group(src,gCount);
StringBuilder sb = new StringBuilder(intLength + gCount + decLength);
if(money < 0){
sb.append("负");
}
char[] mu = new char[4];
System.arraycopy(INTUNIT,0,mu,1,3);
for(int i = tem.length;i > 0;i--){
mu[0] = GROUPUNIT[i - 1];
sb.append((intUnit(tem[i - 1],mu)));
}
if(m.length > 1){
char[] cs = toUpperChar(m[1].toCharArray());
sb.append((decUnit(cs,DECIUNIT)));
}else{
sb.append("整");
}
return sb.toString();
}
/**
* 添加金额单位
*/
private char[] decUnit(char[] numb,char[] unit){
int nl = numb.length;
char[] c = new char[nl * 2];
for(int i = 0;i < nl;i++){
int pp = i * 2;
char n = numb[i];
if(n != '零'){
c[pp] = n;
c[pp + 1] = unit[i];
}else if(i == 0){
c[pp] = n;
}
}
return StringUtil.delNullChar(c);
}
* 添加金额单位
*/
private char[] decUnit(char[] numb,char[] unit){
int nl = numb.length;
char[] c = new char[nl * 2];
for(int i = 0;i < nl;i++){
int pp = i * 2;
char n = numb[i];
if(n != '零'){
c[pp] = n;
c[pp + 1] = unit[i];
}else if(i == 0){
c[pp] = n;
}
}
return StringUtil.delNullChar(c);
}
/**
* 添加金额单位
*/
private char[] intUnit(char[] numb,char[] unit){
int nl = numb.length;
int ul = 0;
char[] c = new char[nl * 2];
for(int i = nl;i > 0;i--){
int pp = c.length - ((nl - i) * 2) - 1;
char n = numb[i - 1];
if(n != '零'){
c[pp - 1] = n;
c[pp] = unit[ul];
}else if(i == nl){
c[pp] = unit[ul];
}else if(c[pp + 1] != '零' && c[pp + 1] != 0){
c[pp] = n;
}
++ul;
}
return StringUtil.delNullChar(c);
}
* 添加金额单位
*/
private char[] intUnit(char[] numb,char[] unit){
int nl = numb.length;
int ul = 0;
char[] c = new char[nl * 2];
for(int i = nl;i > 0;i--){
int pp = c.length - ((nl - i) * 2) - 1;
char n = numb[i - 1];
if(n != '零'){
c[pp - 1] = n;
c[pp] = unit[ul];
}else if(i == nl){
c[pp] = unit[ul];
}else if(c[pp + 1] != '零' && c[pp + 1] != 0){
c[pp] = n;
}
++ul;
}
return StringUtil.delNullChar(c);
}
/**
* 数字转大写
*/
private char[] toUpperChar(char[] chars){
for(int i = 0;i < chars.length;i++){
chars[i] = UPPERCHAR[chars[i] - '0'];
}
return chars;
}
* 数字转大写
*/
private char[] toUpperChar(char[] chars){
for(int i = 0;i < chars.length;i++){
chars[i] = UPPERCHAR[chars[i] - '0'];
}
return chars;
}
/**
* 对数据进行分组
*/
private char[][] group(char[] chars,int glen){
int length = chars.length;
int s = length - GROUPLENGTH, e = length;
char[][] tem = new char[glen][];
for(int i = 0;i < glen;i++){
tem[i] = Arrays.copyOfRange(chars,s,e);
if(s - GROUPLENGTH < 0){
e = s;
s = 0;
}else{
s -= GROUPLENGTH;
e -= GROUPLENGTH;
}
}
return tem;
}
* 对数据进行分组
*/
private char[][] group(char[] chars,int glen){
int length = chars.length;
int s = length - GROUPLENGTH, e = length;
char[][] tem = new char[glen][];
for(int i = 0;i < glen;i++){
tem[i] = Arrays.copyOfRange(chars,s,e);
if(s - GROUPLENGTH < 0){
e = s;
s = 0;
}else{
s -= GROUPLENGTH;
e -= GROUPLENGTH;
}
}
return tem;
}
public static void main(String[] args){
MoneyConvert moneyConvert = new MoneyConvert();
long time = System.currentTimeMillis();
for(int i = 0;i < 1000;i++){
moneyConvert.convert(8658542.003);
}
time = System.currentTimeMillis() - time;
System.out.println(time);// 15 , 31
}
}
MoneyConvert moneyConvert = new MoneyConvert();
long time = System.currentTimeMillis();
for(int i = 0;i < 1000;i++){
moneyConvert.convert(8658542.003);
}
time = System.currentTimeMillis() - time;
System.out.println(time);// 15 , 31
}
}
0 0
- 金额大写转换
- 金额大写转换
- 金额大写转换函数
- 大写金额转换函数
- 金额的大写转换
- 金额大写转换
- 金额转换为大写
- 金额转换为大写
- 金额大写转换
- 金额转换成大写
- 金额转换大写
- 人民币大写金额转换
- 金额转换大写[java]
- 中文大写金额转换
- 转换大写金额
- 金额大写转换
- 金额大写转换
- 金额大写转换
- quartz定时任务时间设置
- Flash批量打印
- Mysql 分页语句Limit用法
- IBM Integration Bus (ESB) 学习
- 道德经 --- 2
- 金额大写转换
- C语言中必须要搞清楚的几个东东
- ASP.NET在点按扭后出现对话框,确定则继续执行,取消则不执行
- 重庆北部新区联合AppCan 共建移动应用产业孵化基地
- Oracle中快速删除某个用户下的所有表数据
- 手动添加交换分区&交换文件
- iOS NSString的常用用法
- C#实现所有经典排序算法
- 【站长SEO助手】浏览器插件 - seo工具