捷凌网安JAVA频道
捷凌IT教育
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME 开源技术 其他技术 论坛
 您现在的位置: 捷凌网安 >> Java >> 核心技术 >> 网络编程 >> 正文
Java转换大写金额的代码

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-5-11 3:14:02

  此代码根据网上搜集到的部分代码进行修改,使得输出准确完整。

    package PrintOperate;

    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)
            ...{
                if(cMoneyStringBuffer.indexOf("零角")==(cMoneyStringBuffer.length()-4))
                ...{
                    cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角"), cMoneyStringBuffer.indexOf("零角") + 2, ZERO);
                }
                else
                ...{
                    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(70052080.70)));
        }
    }

  • 上一篇文章:

  • 下一篇文章:
  •  
     最进更新
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11
     
     推荐文章
    推荐文章Java技术开源搜索引擎04-30
    推荐文章Eclipse中建立自己的JUnit测04-30
    推荐文章Eclipse 3.3上安装jadclipse04-30
    推荐文章spring 编程入门十大问题解答04-30
    推荐文章Java编程中Spring的一些负面04-30
    推荐文章Java应用中Hibernate对多表关04-30
    推荐文章关于hibernate的缓存和CRUD04-30
    推荐文章基于Struts1.2的动态多文件上04-30
    推荐文章演示Struts2实现简单上传代码04-30
    推荐文章J2EE学习笔记--Struts初步认04-30
     
     热点文章
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号