java 数字金额转换_java实现金额转换,阿拉伯数字的金额转换成中国传统的形式...

展开全部

java实现金额转换,阿拉伯数字的金额转换成中国传统的形式

import java.util.HashMap;

import java.text.NumberFormat;

import java.lang.StringBuffer;

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="叁32313133353236313431303231363533e78988e69d8331333264653532";

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 chineseMoenyPattern=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);

chineseMoenyPattern.put("1",TEN);

chineseMoenyPattern.put("2",HUNDRED);

chineseMoenyPattern.put("3",THOUSAND);

chineseMoenyPattern.put("4",TEN_THOUSAND);

chineseMoenyPattern.put("5",TEN);

chineseMoenyPattern.put("6",HUNDRED);

chineseMoenyPattern.put("7",THOUSAND);

chineseMoenyPattern.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=addUnitsToChineseMoenyString(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,

chineseMoenyPattern.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 addUnitsToChineseMoenyString(String moneyStr){

String result;

StringBuffer cMoneyStringBuffer=new StringBuffer(moneyStr);

int indexOfDot=cMoneyStringBuffer.indexOf(DOT);

cMoneyStringBuffer.replace(indexOfDot,indexOfDot+1,YUAN);

cMoneyStringBuffer.insert(cMoneyStringBuffer.length()-1,JIAO);

cMoneyStringBuffer.insert(cMoneyStringBuffer.length(),FEN);

//拾佰仟万亿等都是汉字里面才有的单位,加上它们

if(cMoneyStringBuffer.indexOf("零角零分")!=-1)//去掉零头,加整

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角零分"),

cMoneyStringBuffer.length(),"整");

else if(cMoneyStringBuffer.indexOf("零分")!=-1)//去掉零分,加整

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零分"),

cMoneyStringBuffer.length(),"整");

else if(cMoneyStringBuffer.indexOf("零角")!=-1)

cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("零角"),

cMoneyStringBuffer.indexOf("零角")+2);

result=cMoneyStringBuffer.toString();

return result;

}

private void checkPrecision(String moneyStr){

int fractionDigits=moneyStr.length()-moneyStr.indexOf(DOT)-1;

if(fractionDigits>2)//精度不能比分低

throw new RuntimeException("金额"+moneyStr+"的小数位数多余两位.");

}

public static void main(String[] args){

System.out.println(getInstance().format(new Double(10010001.01)));

}

}

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值