zoukankan      html  css  js  c++  java
  • 阿拉伯数字的金额转换成中国传统的形式

    金额转换,阿拉伯数字的金额转换成中国传统的形式如:输出
    package test.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);
  • 相关阅读:
    解决"Windows没有足够信息,不能验证该证书"问题
    IPA 安装
    基于ECharts图表实现的股票K线图表(matols.com)
    WPF Chart
    IdentityServer4 中文文档
    企业信息系统
    手机网站的几点注意
    查询 SQL_Server 所有表的记录数: for xml path
    iframe在ipad safari的显示
    从WEB SERVICE 上返回大数据量的DATASET
  • 原文地址:https://www.cnblogs.com/dgsh/p/6670803.html
Copyright © 2011-2022 走看看