⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 货币转换.java

📁 一个用于将货币的数值转换为中文写法的代码
💻 JAVA
字号:
package 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 < moneyStr.length(); 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); 
  	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);
     	tmpBuffer.append("整"); 
    }  
    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))); 
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -