金额操作的工具类

  1 public class MoneyUtil {
  2     private static final Map<String, String> zeroToNineHt;    //用于存储0-9大写的哈希表
  3     private static final Map<Integer, String> shiBaiQianHt;    //用于存储十百千大写的哈希表
  4     private static final Map<Integer, String> wanYiZhaoHt;    //用于存储萬億兆大写的哈希表
  5
  6     static {
  7         zeroToNineHt = new Hashtable<String, String>();
  8         zeroToNineHt.put("0", "零");
  9         zeroToNineHt.put("1", "壹");
 10         zeroToNineHt.put("2", "贰");
 11         zeroToNineHt.put("3", "叁");
 12         zeroToNineHt.put("4", "肆");
 13         zeroToNineHt.put("5", "伍");
 14         zeroToNineHt.put("6", "陆");
 15         zeroToNineHt.put("7", "柒");
 16         zeroToNineHt.put("8", "捌");
 17         zeroToNineHt.put("9", "玖");
 18
 19         shiBaiQianHt = new Hashtable<Integer, String>();
 20         shiBaiQianHt.put(0, "");
 21         shiBaiQianHt.put(1, "拾");
 22         shiBaiQianHt.put(2, "佰");
 23         shiBaiQianHt.put(3, "仟");
 24
 25         wanYiZhaoHt = new Hashtable<Integer, String>();
 26         wanYiZhaoHt.put(0, "");
 27         wanYiZhaoHt.put(1, "萬");
 28         wanYiZhaoHt.put(2, "億");
 29         wanYiZhaoHt.put(3, "兆");//按照阅读习惯应该是“萬億”
 30     }
 31
 32     /**
 33      * 将数字类型的金额转化成大写的人民币格式
 34      *
 35      * @param obj
 36      * @return
 37      */
 38     public static String transToRMB(Object obj) {
 39         String number = String.valueOf(obj);
 40         number = StrUtil.formatNull(number,"0");
 41         String formalNumber = new BigDecimal(number).toString();
 42         MoneyUtil moneyUtil = new MoneyUtil();
 43         String[] arr = formalNumber.split("[.]");// 拆分成整数部分和小数部分
 44         String retVal = moneyUtil.parseIntegerPart(arr[0]);// 整数部分
 45         if (arr.length == 2 && Float.parseFloat(arr[1]) > 0) {
 46             retVal += moneyUtil.parseFloatPart(arr[1]);// 小数部分
 47         }
 48         return retVal;
 49     }
 50
 51     /**
 52      * 得到整数部分的汉字大写表示
 53      *
 54      * @return
 55      */
 56     private String parseIntegerPart(String integerPart) {
 57         // 将整数部分逆序,因为需要反向读取
 58         String reverseIntegerPart = "";
 59         for (int i = integerPart.length() - 1; i > -1; i--) {
 60             reverseIntegerPart += integerPart.charAt(i);
 61         }
 62
 63         // 将整数部分按四位分组
 64         Pattern p = Pattern.compile("\\d{4}", Pattern.CASE_INSENSITIVE);
 65         Matcher m = p.matcher(reverseIntegerPart);
 66         StringBuffer sb = new StringBuffer();
 67         boolean result = m.find();
 68         while (result) {
 69             m.appendReplacement(sb, m.group(0) + ",");
 70             result = m.find();
 71         }
 72         m.appendTail(sb);
 73
 74         String retVal = "";
 75         String[] arr = sb.toString().split(",");
 76         for (int i = arr.length - 1; i >= 0; i--) {
 77             for (int j = arr[i].length() - 1; j >= 0; j--) {
 78                 String str = String.valueOf(arr[i].charAt(j));
 79                 retVal += zeroToNineHt.get(str) + shiBaiQianHt.get(j);//加单位(十百千)
 80             }
 81             retVal += wanYiZhaoHt.get(i % 4);// 加单位(万亿兆)
 82             retVal = this.formatZero(retVal);
 83         }
 84
 85         // 格式化
 86         retVal = this.formatZero(retVal);
 87         if(retVal.startsWith("壹拾")){
 88             retVal = retVal.replaceFirst("壹拾", "拾");//按照阅读习惯,第一个"壹拾"应该读作“拾”
 89         }
 90         return StrUtil.formatNull(retVal, "零");
 91     }
 92
 93     /**
 94      * 得到小数部分的汉字大写表示
 95      *
 96      * @return
 97      */
 98     private String parseFloatPart(String floatPart) {
 99         String retVal = "点";
100         for (int i = 0; i < floatPart.length(); i++) {
101             String temp = String.valueOf(floatPart.charAt(i));
102             retVal += zeroToNineHt.get(temp);
103         }
104         return retVal;
105     }
106
107     /**
108      * 格式化零
109      *
110      * @return
111      */
112     private String formatZero(String str){
113         str = str.replaceAll("(零[萬仟佰拾])", "零");
114         str = str.replaceAll("(零{2,})", "零");// 多个零的话,只取一个
115         str = str.replaceAll("(零)($)", "$2");// 零在末尾则去掉
116         return str;
117     }
118 }
时间: 2024-10-08 20:35:03

金额操作的工具类的相关文章

c语言中字符串操作的工具类

 1.编写头文件 #define _CRT_SECURE_NO_WARNINGS //#pragmawarning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> struct CString { char *p;        //保存字符串首地址 int reallength; //实际长度 }; typedef struct CString mystring;//

poi操作Excel工具类

在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完成的功能是:读取Excel.写入Excel.合并Excel的功能.

List操作的工具类

1 /** 2 * <p>list操作的工具类</p> 3 */ 4 public class ListUtil { 5 /** 6 * 过滤掉list里面才重复项 7 * 8 * @param list 9 * @return List 10 */ 11 public static List<String> filterRepeat(List<String> list){ 12 int length = list.size(); 13 for(int i

Java 借助poi操作Wold工具类

? Apache封装的POI组件对Excel,Wold的操作已经非常的丰富了,在项目上也会经常用到一些POI的基本操作 这里就简单的阐述POI操作Wold的基本工具类,代码还是有点粗造的,但是不影响使用. 这个类包含了一些对文本进行换行,加粗,倾斜,字体颜色,大小,首行缩进,添加边框等方法.分享给大家学习下: Apache POI的组件: ApachePOI包含用于处理MS-Office的所有OLE2复合文档的类和方法.该API的组件列表如下 - POIFS(不良混淆实现文件系统) - 此组件是

操作集合工具类:Collections

Collections是常用的操作Set.List.Map的工具类.提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合对象设置为不可变.对集合对象实现同步控制等方法. reverse 反转: /** * Reverses the order of the elements in the specified list.<p> * * This method runs in linear time. * * @param list the list whose elements a

自己封装的poi操作Excel工具类

该工具类主要完成的功能是:读取Excel.汇总Excel的功能.在读取时,可以设定开始和结束读取的位置.设定是否读取多个sheet.设定读取那个或者那些sheet等.在汇总时,如设定是否覆盖目标文件.设定是否比较检查重复内容.设定检查重复的列索引等功能. package com.tgb.ccl.excel.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; impo

java与javascript对cookie操作的工具类

Java对cookie的操作 package cn.utils; import java.util.HashMap; import java.util.Map; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 操作cookie的工具类(默认cookie的有效路径为"/")

(4)文本挖掘(一)——准备文本读写及对Map操作的工具类

文本挖掘是一个对具有丰富语义的文本进行分析,从而理解其所包含的内容和意义的过程.文本挖掘包含分词.文本表示.文本特征选择.文本分类.文本聚类.文档自动摘要等方面的内容.文本挖掘的具体流程图可下图所示: 我的项目是以复旦大学中文语料库和路透社英文语料库为数据集的,都是有类别的两层目录文本集. 不管你要做什么,你首先都要先读取文本,为了方便后面的操作,我写了几个工具类,这里先将文本读取Reader类.文本写入Writer类和对Map的各种操作MapUtil类. Reader import java.

android操作ini工具类

package com.smarteye.common; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Inp