实现人民币数字转换成中文大写(前端、后台两种方式)

以下两种方式拿来直接使用就行

展现形式:

 js实现:

var digitUppercase = function(n) {
  var fraction = ['角', '分'];
  var digit = [
   '零', '壹', '贰', '叁', '肆',
   '伍', '陆', '柒', '捌', '玖'
  ];
  var unit = [
   ['元', '万', '亿'],
   ['', '拾', '佰', '仟']
  ];
  var head = n < 0 ? '欠' : '';
  n = Math.abs(n);
  var s = '';
  for (var i = 0; i < fraction.length; i++) {
   s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
  }
  s = s || '整';
  n = Math.floor(n);
  for (var i = 0; i < unit[0].length && n > 0; i++) {
   var p = '';
   for (var j = 0; j < unit[1].length && n > 0; j++) {
    p = digit[n % 10] + unit[1][j] + p;
    n = Math.floor(n / 10);
   }
   s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
  }
  return head + s.replace(/(零.)*零元/, '元')
   .replace(/(零.)+/g, '零')
   .replace(/^整$/, '零元整');
 };

java实现:

public static String dealMoney(String inputStr) {
    StringBuilder resultStrBuld = new StringBuilder();
    String[] split = inputStr.split("\\.");
    String intStr = split[0];
    //@@@@@@@@@@处理整数部分
    try {
        //四位间隔的大单位
        String BigUnit[] = {"亿", "万", "元"};
        //四位之间的小单位
        String smallUnit[] = {"仟", "佰", "拾", ""};
        String[] upNum = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        if (intStr.matches("^[0]+$")) {
            //如果全是输入的 0 返回
            if(split.length==2 && split[1].matches("^[0]+$")){
                return "零元零角零分";
            }
        }
        //去掉以整数部分为0开头的情况 eg:0000456 return 456
        intStr = cutFrontZeros(intStr);
        //按照四位进行处理进行转换,length是处理的次数
        int length = intStr.length() / 4;
        if ((intStr.length() % 4) > 0) {
            //有余数次数+1
            length++;
        }
        //获取截取的前索引
        int indexS = 0;
        int indexE = 0;
        //处理四位间隔数据
        for (int i = 0; i < length; i++) {
            //取大单位的索引
            int Bindex = 0;
            if (length < 3) {
                Bindex = i + (3 - length);
            } else {
                Bindex = i;
            }
            //分割索引
            if (i == 0 && ((intStr.length() % 4) > 0)) {
                indexE = intStr.length() % 4;
            } else {
                indexE = indexE + 4;
            }
            String substrNum = intStr.substring(indexS, indexE);
            //处理四位之间数据
            for (int j = 0; j < substrNum.length(); j++) {
                //判断截取字符串之后是否全是0
                boolean subStrAllzero = false;
                //substrNum后面全是0
                if (substrNum.substring(j, substrNum.length()).matches("^[0]+$")) {
                    subStrAllzero = true;
                }
                //判断这一位是否是0
                boolean thisCharIs = false;
                if ("0".equals(String.valueOf(substrNum.charAt(j)))) {
                    thisCharIs = true;
                } else {
                    thisCharIs = false;
                }
                //取小单位索引
                int Sindex = 0;
                if (substrNum.length() != 4) {
                    Sindex = Sindex + (4 - substrNum.length() + j);
                } else {
                    Sindex = j;
                }
                /*拼接数字对应汉字
                    如果后面全是0拼接单位,并结束循环(需要剔除0000这种情况)
                    否则拼接大写汉字,如果上一位且这一位是零不拼接汉字
                    */
                if (subStrAllzero) {
                    if (j != 0 || i == (length - 1)) {
                        resultStrBuld.append(BigUnit[Bindex]);
                    }
                    break;
                } else { //if((!lastCharIs || !thisCharIs))
                    if (resultStrBuld.toString().endsWith("零") && thisCharIs) {
 
                        } else {
                            resultStrBuld.append(upNum[Integer.parseInt(String.valueOf(substrNum.charAt(j)))]);
                        }
                    }
                    /*
                 * 拼接单位
                 *   如果是最后一位,拼接大单位
                 *   否则拼接小单位
                 *       如果上一位是零则不拼接单位,等非零情况拼接单位
                 * */
                if ((j == (substrNum.length() - 1))) {
                    resultStrBuld.append(BigUnit[Bindex]);
                } else {
                    if (!resultStrBuld.toString().endsWith("零")) {
                        resultStrBuld.append(smallUnit[Sindex]);
                    }
                }
            }
            //重置字符串截取的开始索引。
            indexS = indexE;
        }
        //@@@@@@@@@@处理整数部分 END
 
            //@@@@@@@@@@处理小数部分
        if (split.length == 2) {
            String point = split[1];
            if (point.length() == 1) {
                resultStrBuld.append(upNum[Integer.parseInt(String.valueOf(point.charAt(0)))]).append("角").append("零分");
                } else {
resultStrBuld.append(upNum[Integer.parseInt(String.valueOf(point.charAt(0)))]).append("角").append(upNum[Integer.parseInt(String.valueOf(point.charAt(1)))]).append("分");
            }
        } else {
            resultStrBuld.append("整");
        }
    } catch (Exception e) {
        e.printStackTrace();
        return "null";
    }
    return resultStrBuld.toString();
}
/**
 * 去掉第一位为0的情况
 * 0000000001.02 = 1.02
 *
 * @param str
 * @return
 */
public static String cutFrontZeros(String str) {
    //如果全为整数部分全为0,保留一个0
    if("".equals(str.replaceAll("0",""))){
        return "0";
    }
    String s = str;
    if (str.startsWith("0")) {
        s = cutFrontZeros(str.substring(1, str.length()));
    }
    return s;
}

你可能感兴趣的:(前端,javascript,html,java)