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

 

Code:
  1. package com.fourstar.test;  
  2.   
  3. import java.text.NumberFormat;  
  4. import java.util.HashMap;  
  5.   
  6. public class SimpleMoneyFormat {  
  7.     public static final String EMPTY = "";  
  8.     public static final String ZERO = "零";  
  9.     public static final String ONE = "壹";  
  10.     public static final String TWO = "贰";  
  11.     public static final String THREE = "叁";  
  12.     public static final String FOUR = "肆";  
  13.     public static final String FIVE = "伍";  
  14.     public static final String SIX = "陆";  
  15.     public static final String SEVEN = "柒";  
  16.     public static final String EIGHT = "捌";  
  17.     public static final String NINE = "玖";  
  18.     public static final String TEN = "拾";  
  19.     public static final String HUNDRED = "佰";  
  20.     public static final String THOUSAND = "仟";  
  21.     public static final String TEN_THOUSAND = "万";  
  22.     public static final String HUNDRED_MILLION = "亿";  
  23.     public static final String YUAN = "元";  
  24.     public static final String JIAO = "角";  
  25.     public static final String FEN = "分";  
  26.     public static final String DOT = ".";  
  27.   
  28.     public static SimpleMoneyFormat formatter = null;  
  29.     private HashMap chineseNumberMap = new HashMap();  
  30.     private HashMap chineseMoneyPattern = new HashMap();  
  31.     private NumberFormat numberFormat = NumberFormat.getInstance();  
  32.   
  33.     private SimpleMoneyFormat() {  
  34.         numberFormat.setMaximumFractionDigits(4);  
  35.         numberFormat.setMinimumFractionDigits(2);  
  36.         numberFormat.setGroupingUsed(false);  
  37.         chineseNumberMap.put("0", ZERO);  
  38.         chineseNumberMap.put("1", ONE);  
  39.         chineseNumberMap.put("2", TWO);  
  40.         chineseNumberMap.put("3", THREE);  
  41.         chineseNumberMap.put("4", FOUR);  
  42.         chineseNumberMap.put("5", FIVE);  
  43.         chineseNumberMap.put("6", SIX);  
  44.         chineseNumberMap.put("7", SEVEN);  
  45.         chineseNumberMap.put("8", EIGHT);  
  46.         chineseNumberMap.put("9", NINE);  
  47.         chineseNumberMap.put(DOT, DOT);  
  48.   
  49.         chineseMoneyPattern.put("1", TEN);  
  50.         chineseMoneyPattern.put("2", HUNDRED);  
  51.         chineseMoneyPattern.put("3", THOUSAND);  
  52.         chineseMoneyPattern.put("4", TEN_THOUSAND);  
  53.         chineseMoneyPattern.put("5", TEN);  
  54.         chineseMoneyPattern.put("6", HUNDRED);  
  55.         chineseMoneyPattern.put("7", THOUSAND);  
  56.         chineseMoneyPattern.put("8", HUNDRED_MILLION);  
  57.     }  
  58.   
  59.     public static SimpleMoneyFormat getInstance() {  
  60.         if (formatter == null) {  
  61.             formatter = new SimpleMoneyFormat();  
  62.         }  
  63.         return formatter;  
  64.     }  
  65.   
  66.     public String format(String moneyStr) {  
  67.         checkPrecision(moneyStr);  
  68.         String result;  
  69.         result = converToChineseNumber(moneyStr);  
  70.         result = addUnitsToChineseMoneyString(result);  
  71.         return result;  
  72.     }  
  73.   
  74.     public String format(double moneyDouble) {  
  75.         return format(numberFormat.format(moneyDouble));  
  76.     }  
  77.   
  78.     public String format(int moneyInt) {  
  79.         return format(numberFormat.format(moneyInt));  
  80.     }  
  81.   
  82.     public String format(long moneyLong) {  
  83.         return format(numberFormat.format(moneyLong));  
  84.     }  
  85.   
  86.     public String format(Number moneyNum) {  
  87.         return format(numberFormat.format(moneyNum));  
  88.     }  
  89.   
  90.     private String addUnitsToChineseMoneyString(String moneyStr) {  
  91.         String result;  
  92.         StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);  
  93.         int indexOfDot = cMoneyStringBuffer.indexOf(DOT);  
  94.         cMoneyStringBuffer.replace(indexOfDot, indexOfDot+1, YUAN);  
  95.         cMoneyStringBuffer.insert(cMoneyStringBuffer.length()-1, JIAO);  
  96.         cMoneyStringBuffer.insert(cMoneyStringBuffer.length(),FEN);  
  97.         if(cMoneyStringBuffer.indexOf("零角零分")!=-1)cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角零分"), cMoneyStringBuffer.length(), "整");  
  98.         if(cMoneyStringBuffer.indexOf("零分")!=-1)cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零分"), cMoneyStringBuffer.length(), "整");  
  99.         if(cMoneyStringBuffer.indexOf("零角")!=-1)cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("零角"), cMoneyStringBuffer.indexOf("零角")+2);  
  100.         result = cMoneyStringBuffer.toString();  
  101.         return result;  
  102.     }  
  103.   
  104.     private String converToChineseNumber(String moneyStr) {  
  105.         String result;  
  106.         StringBuffer cMoneyStringBuffer = new StringBuffer();  
  107.         for (int i = 0; i < moneyStr.length(); i++) {  
  108.             cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1)));  
  109.         }  
  110.         int indexOfDot = cMoneyStringBuffer.indexOf(DOT);  
  111.         int moneyPatternCursor = 1;  
  112.         for(int i = indexOfDot-1;i>0;i--){  
  113.             cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY+ moneyPatternCursor));  
  114.             moneyPatternCursor = moneyPatternCursor == 8?1:moneyPatternCursor+1;  
  115.         }  
  116.         String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."));  
  117.         cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."), cMoneyStringBuffer.length());  
  118.         while(cMoneyStringBuffer.indexOf("零拾")!=-1){  
  119.             cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"),cMoneyStringBuffer.indexOf("零拾")+2,ZERO);  
  120.         }  
  121.         while(cMoneyStringBuffer.indexOf("零佰")!=-1){  
  122.             cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"),cMoneyStringBuffer.indexOf("零佰")+2,ZERO);  
  123.         }  
  124.         while(cMoneyStringBuffer.indexOf("零仟")!=-1){  
  125.             cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"),cMoneyStringBuffer.indexOf("零仟")+2,ZERO);  
  126.         }  
  127.         while(cMoneyStringBuffer.indexOf("零万")!=-1){  
  128.             cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"),cMoneyStringBuffer.indexOf("零万")+2,TEN_THOUSAND);  
  129.         }  
  130.         while(cMoneyStringBuffer.indexOf("零亿")!=-1){  
  131.             cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"),cMoneyStringBuffer.indexOf("零亿")+2,HUNDRED_MILLION);  
  132.         }  
  133.         while(cMoneyStringBuffer.indexOf("零零")!=-1){  
  134.             cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"),cMoneyStringBuffer.indexOf("零零")+2,ZERO);  
  135.         }  
  136.         if(cMoneyStringBuffer.lastIndexOf(ZERO)==cMoneyStringBuffer.length()-1)cMoneyStringBuffer.delete(cMoneyStringBuffer.length()-1, cMoneyStringBuffer.length());  
  137.         cMoneyStringBuffer.append(fractionPart);  
  138.         result = cMoneyStringBuffer.toString();  
  139.         return result;  
  140.     }  
  141.   
  142.     private void checkPrecision(String moneyStr) {  
  143.         int fractionDigits = moneyStr.length() - moneyStr.indexOf(DOT) - 1;  
  144.         if (fractionDigits > 2)throw new RuntimeException("金额" + moneyStr + "的小数位多于两位。");  
  145.     }  
  146.       
  147.       
  148.       
  149.       
  150.     public static void main(String args[]){  
  151.         System.out.println(new SimpleMoneyFormat().format(87654321234567890.01));  
  152.     }  
  153.   
  154. }  

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值