zoukankan      html  css  js  c++  java
  • 小写金额转换为大写

    public static final String[][] CAPITAL;
     static {
      CAPITAL = new String[][] {
        { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }, // 0-9
        { "拾", "佰", "仟" }, // 拾,佰,仟
        { "万" }, // 万
        { "亿" }, // 亿
        { "元" }, // 个位
        { "角", "分" }, // 小数位,{"角","分","厘"}
        { "正", "负" } // 正负数的前缀形式,当NEGATIVE=true时生效
      };
     }

    /**
      * 转换成大写金额
      *
      * @param strMoney(String):规范的数字货币形式字符串
      */
     public static String toFrmString(String strMoney) {
      StringBuffer sb = new StringBuffer(100);

      String[] tmp = strMoney.trim().split("\\.");

      // --------整数位处理---------------
      char[] ci = tmp[0].toCharArray();

      char theBit = '0'; // 当前数字位
      int zeroBit = 0; // 开始零位
      int bitLen = 0; // 当前位所处的位置(从个位开始0计数)
      boolean flag = false; // 是否具有有效的整数位
      for (int index = 0; index < ci.length; index++) {
       theBit = ci[index]; // 取出当前处理的整数位
       bitLen = ci.length - index - 1; // 计算当前处理的数处于什么位置

       if (zeroBit > 0 && theBit != '0') {
        sb.append(CAPITAL[0][0]); // 加前导零
       }
       if (theBit != '0')
        sb.append(CAPITAL[0][theBit - '0']); // 大写数字

       if (bitLen % 8 == 0) {

        if (bitLen == 0) {
         // 元
         if (ci.length > 1 || theBit != '0')
          sb.append(CAPITAL[4][0]); // 元
        } else {
         // 亿
         sb.append(CAPITAL[3][0]); // 亿
        }

       } else {

        if (bitLen % 4 == 0) {
         // 万
         if (theBit != '0' || zeroBit == 0 || zeroBit - bitLen < 3) {
          sb.append(CAPITAL[2][0]); // 万
         }
        } else {
         // 仟佰拾
         if (theBit != '0')
          sb.append(CAPITAL[1][bitLen % 4 - 1]); // 仟佰拾
        }
       }

       // 检查并条件更新零位
       if (theBit == '0') {
        zeroBit = zeroBit == 0 ? bitLen : zeroBit;
       } else {
        zeroBit = 0;
        flag = true;
       }

      }
      // --------小数位处理---------------
      char[] cf = null;
      String zs = "";
      
      if (tmp.length > 1) {
       cf = tmp[1].toCharArray();

       for (int index = 0; index < cf.length; index++) {
        theBit = cf[index]; // 取出当前处理的小数位
        if (zeroBit > 0 && theBit != '0' && flag) {
         sb.append(CAPITAL[0][0]); // 加前导零
        }
        if (theBit != '0')
         sb.append(CAPITAL[0][theBit - '0']); // 大写数字
        if (theBit != '0')
         sb.append(CAPITAL[5][index]); // 角分

        zeroBit = theBit == '0' ? 1 : 0;
       }
      }else{
       zs = "整";
      }

      String ret = null;
      
      ret = (sb.length() == 0 ? (CAPITAL[0][0] + CAPITAL[4][0]) : sb
        .toString());  
      ret = ret.concat(zs);
      
      return ret;
     }
    /**
      * 货币数字形式转换成大写
      *
      * @param strMoney(String):货币的数字形式字符串
      */
     public static String parseMoney(String strMoney)
       throws NumberFormatException {
      BigDecimal bd = new BigDecimal(strMoney);
      // 输入检查
      if (bd.signum() == -1 && !NEGATIVE)
       throw new NumberFormatException(" 货币金额不能为负数 ");

      try {
       bd.setScale(CAPITAL[5].length);
      } catch (ArithmeticException e) {
       throw new NumberFormatException(" 只能为 " + CAPITAL[5].length
         + " 位小数 ");
      }
      // 大写金额转换
      if (NEGATIVE && bd.signum() != 0) {
       return CAPITAL[6][bd.signum() == -1 ? 1 : 0]
         + toFrmString(bd.abs().toString());
      } else {
       return toFrmString(bd.toString());
      }

     }

  • 相关阅读:
    http://maxie.cnblogs.com/
    有一种爱叫错过
    Lotuser进阶系列(转)——多目录环境中的单点登陆1
    DOMINO中实现PDF在线编辑控件 and so on......(三)
    DOMINO中实现PDF在线编辑控件 and so on......(一)
    Lotuser进阶系列(转)——多目录环境中的单点登陆2
    在两个代理之间传递参数
    利用 DSAPI 为 Domino Web 用户定制用户名和口令认证
    通过 Lotus Domino Java 代理消费 Web 服务
    代理中如何获取参数么?
  • 原文地址:https://www.cnblogs.com/xiyuanbaiyun/p/2196747.html
Copyright © 2011-2022 走看看