function moneyNumToChinese(money, decimal = 4) {
  if (!money) {
    return "";
  }
 
  const cnNums = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
  const cnIntRadice = ["", "拾", "佰", "仟"];
  const cnIntUnits = ["", "万", "亿", "兆"];
  const cnDecUnits = ["角", "分", "厘", "毫", '丝', '忽'];
  const cnInteger = "整";
  const cnIntLast = "元";
  const maxNum = 999999999999999.9999;
 
  money = parseFloat(money);
  if (money > maxNum || money < -maxNum) {
    return "超出最大处理数字";
  }
 
  let chineseStr = "";
  let parts;
  let pmSymbol = "";
 
  if (money === 0) {
    chineseStr = cnNums[0] + cnIntLast + cnInteger;
    return chineseStr;
  }
  if (money < 0) {
    money = -money;
    pmSymbol = "负 ";
  }
 
  money = money.toString();
  if (money.indexOf(".") === -1) {
    parts = [money, ''];
  } else {
    parts = money.split(".");
    parts[1] = parts[1].substr(0, decimal);
  }
 
  const integerNum = parts[0];
  const decimalNum = parts[1];
 
  // 处理整数部分
  if (parseInt(integerNum, 10) > 0) {
    let zeroCount = 0;
    const IntLen = integerNum.length;
    for (let i = 0; i < IntLen; i++) {
      const n = integerNum[i];
      const p = IntLen - i - 1;
      const q = Math.floor(p / 4);
      const m = p % 4;
      if (n === "0") {
        zeroCount++;
      } else {
        if (zeroCount > 0) {
          chineseStr += cnNums[0];
        }
        zeroCount = 0;
        chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
      }
      if (m === 0 && zeroCount < 4) {
        chineseStr += cnIntUnits[q];
      }
    }
    chineseStr += cnIntLast;
  }
 
  // 处理小数部分
  if (decimalNum !== '') {
    const decLen = decimalNum.length;
    console.log('decLen: ', decLen);
    for (let i = 0; i < decLen; i++) {
      const n = decimalNum[i];
      if (n !== '0') {
        chineseStr += cnNums[Number(n)] + cnDecUnits[i];
      }
    }
  }
 
  // 处理特殊情况
  if (chineseStr === '') {
    chineseStr += cnNums[0] + cnIntLast + cnInteger;
  } else if (decimalNum === '') {
    chineseStr += cnInteger;
  }
  chineseStr = pmSymbol + chineseStr;
 
  return chineseStr;
}