posts - 84,  comments - 54,  trackbacks - 0
          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);
          ?

          posted on 2007-01-13 13:57 JavaCoffe 閱讀(1473) 評論(4)  編輯  收藏


          FeedBack:
          # re: [轉]阿拉伯數字的金額轉換成中國傳統的貨幣形式[未登錄]
          2007-03-15 13:20 | tony
          經典啊  回復  更多評論
            
          # re: [轉]阿拉伯數字的金額轉換成中國傳統的貨幣形式[未登錄]
          2007-04-24 11:25 | a
          hao  回復  更多評論
            
          # re: [轉]阿拉伯數字的金額轉換成中國傳統的貨幣形式
          2007-10-27 14:51 | 綿
          十分有趣!  回復  更多評論
            
          # re: [轉]阿拉伯數字的金額轉換成中國傳統的貨幣形式[未登錄]
          2008-03-09 15:01 | test
          代碼不全!  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(5)

          隨筆分類(80)

          收藏夾(1)

          最新隨筆

          積分與排名

          • 積分 - 58624
          • 排名 - 894

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 台江县| 涿鹿县| 仙游县| 揭东县| 苏尼特右旗| 荆州市| 苗栗市| 临湘市| 美姑县| 襄樊市| 固原市| 兰坪| 五常市| 汝城县| 兴安县| 周口市| 曲阜市| 南昌县| 汤原县| 牙克石市| 兰考县| 蒙山县| 焦作市| 阿拉善右旗| 乐安县| 张家川| 青神县| 芜湖县| 城市| 习水县| 保定市| 台州市| 怀集县| 孝义市| 仁化县| 开江县| 康马县| 寿阳县| 仪征市| 金华市| 临汾市|