{"version":3,"file":"formatNumber2.mjs","sources":["../../../../../packages/utils/formatNumber.ts"],"sourcesContent":["import { round, trimEnd } from 'lodash-es'\nimport { isNullOrUnDef } from './is'\n\n/**\n * @param number 要格式化的数字\n * @param decimals 保留几位小数\n * @param decPoint 小数点符号\n * @param thousandsSep 千分位符号\n * @returns formattedNumber\n */\nexport function formatNumber(\n  number: number | string,\n  decimals: number | 'auto' = 2,\n  decPoint = '.',\n  thousandsSep = ','\n): string {\n  if (null === number) {\n    return '-'\n  } else if (undefined === number) {\n    return number\n  }\n  number = `${number}`.replace(/[^0-9+-Ee.]/g, '')\n  const n = !isFinite(+number) ? 0 : +number\n  const toFixedFix = (n, prec) => {\n    const k = 10 ** prec\n    return `${round(n * k) / k}`\n  }\n  let prec\n  // auto 最小2位 最大8位\n  if (decimals == 'auto') {\n    const arr = n.toString().split('.')\n    if (arr[1] == undefined || arr[1].length < 2) {\n      prec = 2\n    } else if (arr[1].length > 6) {\n      prec = 6\n    } else {\n      prec = arr[1].length\n    }\n  } else {\n    prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)\n  }\n  const s = toFixedFix(n, prec).split('.')\n  const re = /(-?\\d+)(\\d{3})/\n  while (re.test(s[0])) {\n    s[0] = s[0].replace(re, `$1${thousandsSep}$2`)\n  }\n  if ((s[1] || '').length < prec) {\n    s[1] = s[1] || ''\n    s[1] += new Array(prec - s[1].length + 1).join('0')\n  }\n  return s.join(decPoint)\n}\n\n/**\n * @param number 要格式化的数字\n * @param chineseMultip 倍率，如果单位是万元的时候可以传10000\n * @returns string\n */\nexport function numberToChinese(num: number | string, chineseMultip = 1, max = 1e12) {\n  if (isNullOrUnDef(num) || (typeof num === 'string' && /[^\\d.]/.test(num))) {\n    return ''\n  }\n  const number = chineseMultiply(Number(num), chineseMultip)\n  if (number > max) {\n    return '金额过大暂不支持'\n  }\n  const chineseNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']\n  const chineseUnits = [\n    '',\n    '拾',\n    '佰',\n    '仟',\n    '万',\n    '十',\n    '百',\n    '千',\n    '亿',\n    '十',\n    '百',\n    '千',\n    '兆',\n    '十',\n    '百',\n    '千',\n    '京',\n    '十',\n    '百',\n    '千',\n    '垓',\n    '十',\n    '百',\n    '千',\n    '秭',\n    '十',\n    '百',\n    '千',\n    // '穣',\n    // '沟',\n    // '涧',\n    // '正',\n    // '载',\n    // '极',\n  ]\n  const chineseDecimals = ['角', '分', '厘', '毫']\n  // console.log(num,number)\n  let result = ''\n  if (number == 0) {\n    return chineseNums[0]\n  }\n\n  const numStr = number.toString()\n  const integerPart = numStr.split('.')[0]\n  const decimalPart = numStr.split('.')[1] || ''\n\n  // 处理整数部分\n  const len = integerPart.length\n  let useLastUni = false\n  for (let i = 0; i < len; i++) {\n    const digit = parseInt(integerPart[i])\n    const unit = len - i - 1\n    if (digit !== 0) {\n      result += chineseNums[digit] + chineseUnits[unit]\n    } else {\n      // 处理连续的零，只添加一个零\n      if (result[result.length - 1] !== chineseNums[0]) {\n        const lastPart = integerPart.slice(i, integerPart.length - 1)\n        // const usedPart = integerPart.slice(0, i)\n        if (lastPart.length > 3 && Number(lastPart) === 0 && !useLastUni) {\n          useLastUni = true\n          result += chineseUnits[unit - (unit % 4)]\n        } else {\n          result += chineseNums[digit]\n        }\n      }\n    }\n  }\n\n  // 处理小数部分\n  const decimalLen = decimalPart.length\n  if (decimalLen > 0) {\n    result += '圆'\n  }\n  for (let i = 0; i < decimalLen; i++) {\n    const digit = parseInt(decimalPart[i])\n    if (digit !== 0) {\n      result += chineseNums[digit] + (i < chineseDecimals.length ? chineseDecimals[i] : '')\n    }\n  }\n  // if (result.endsWith('零')) {\n  //   result = result.\n  // }\n  return trimEnd(result, '零')\n}\n\nexport function numberToSimpleChinese(num: number): string {\n  const numbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']\n  const units = ['', '十', '百', '千']\n  const bigUnits = ['', '万', '亿']\n  if (num < 0 || num >= 10e12) {\n    console.warn('数字太大')\n    return '-'\n  }\n\n  // 处理 0\n  if (num === 0) return numbers[0]\n\n  // 处理负数\n  const isNegative = num < 0\n  num = Math.abs(num)\n\n  // 分离整数和小数部分\n  const [integer, decimal] = num.toString().split('.')\n\n  const convertSection = (section: number): string => {\n    let result = ''\n    let unitPos = 0\n    let needZero = false\n\n    while (section > 0) {\n      const digit = section % 10\n      if (digit === 0) {\n        if (needZero) {\n          result = numbers[0] + result\n          needZero = false\n        }\n      } else {\n        result = numbers[digit] + units[unitPos] + result\n        needZero = true\n      }\n      unitPos++\n      section = Math.floor(section / 10)\n    }\n    return result\n  }\n\n  // 处理整数部分\n  let integerResult = ''\n  let section = 0\n  let sectionPos = 0\n  let needZero = false\n  let tmp = parseInt(integer)\n\n  while (tmp > 0) {\n    section = tmp % 10000\n    if (section !== 0) {\n      const sectionStr = convertSection(section)\n      if (needZero) {\n        integerResult = numbers[0] + integerResult\n      }\n      integerResult = sectionStr + (section === 0 ? '' : bigUnits[sectionPos]) + integerResult\n      needZero = section < 1000 && section > 0\n    }\n    sectionPos++\n    tmp = Math.floor(tmp / 10000)\n  }\n\n  // 处理特殊情况\n  integerResult = integerResult.replace(/零+$/, '')\n  integerResult = integerResult.replace(/零+/g, '零')\n  integerResult = integerResult.replace(/零([万亿])/g, '$1')\n\n  if (integerResult.startsWith('一十')) {\n    integerResult = integerResult.substring(1)\n  }\n\n  // 处理小数部分\n  let decimalResult = ''\n  if (decimal) {\n    decimalResult = '点'\n    for (const digit of decimal) {\n      decimalResult += numbers[parseInt(digit)]\n    }\n  }\n\n  // 组合最终结果\n  let result = ''\n\n  // 添加负号\n  if (isNegative) {\n    result += '负'\n  }\n\n  // 添加整数和小数部分\n  result += integerResult\n  if (decimalResult) {\n    result += decimalResult\n  }\n\n  return result || numbers[0]\n}\n\nexport function add(arg1, arg2) {\n  let r1, r2\n  try {\n    r1 = arg1.toString().split('.')[1].length\n  } catch (e) {\n    r1 = 0\n  }\n  try {\n    r2 = arg2.toString().split('.')[1].length\n  } catch (e) {\n    r2 = 0\n  }\n  const c = Math.abs(r1 - r2)\n  const m = 10 ** Math.max(r1, r2)\n  if (c > 0) {\n    const cm = 10 ** c\n    if (r1 > r2) {\n      arg1 = Number(arg1.toString().replace('.', ''))\n      arg2 = Number(arg2.toString().replace('.', '')) * cm\n    } else {\n      arg1 = Number(arg1.toString().replace('.', '')) * cm\n      arg2 = Number(arg2.toString().replace('.', ''))\n    }\n  } else {\n    arg1 = Number(arg1.toString().replace('.', ''))\n    arg2 = Number(arg2.toString().replace('.', ''))\n  }\n  return (arg1 + arg2) / m\n}\nexport function subtract(arg1, arg2) {\n  let r1, r2\n  try {\n    r1 = arg1.toString().split('.')[1].length\n  } catch (e) {\n    r1 = 0\n  }\n  try {\n    r2 = arg2.toString().split('.')[1].length\n  } catch (e) {\n    r2 = 0\n  }\n  const m = 10 ** Math.max(r1, r2) //last modify by deeka //动态控制精度长度\n  const n = r1 >= r2 ? r1 : r2\n  return ((arg1 * m - arg2 * m) / m).toFixed(n)\n}\nexport function chineseMultiply(arg1: number, arg2: number) {\n  let m = 0\n  const s1 = arg1.toString(),\n    s2 = arg2.toString()\n  try {\n    m += s1.split('.')[1].length\n  } catch (e) {}\n  try {\n    m += s2.split('.')[1].length\n  } catch (e) {}\n  return (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) / 10 ** m\n}\nexport function divide(arg1, arg2) {\n  let t1 = 0,\n    t2 = 0\n\n  try {\n    t1 = arg1.toString().split('.')[1].length\n  } catch (e) {}\n  try {\n    t2 = arg2.toString().split('.')[1].length\n  } catch (e) {}\n  const r1 = Number(arg1.toString().replace('.', ''))\n  const r2 = Number(arg2.toString().replace('.', ''))\n  return (r1 / r2) * 10 ** (t2 - t1)\n}\n"],"names":[],"mappings":"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"}