{"version":3,"file":"dep-7913464b.mjs","sources":["../../../common/js/input-number/large-number.ts"],"sourcesContent":["import { isString, isNumber, isObject } from 'lodash-es';\nimport log from '../log/log';\n\nexport type InputNumberDecimalPlaces = number | { enableRound: boolean; places: number };\n\nexport function fillZero(length: number) {\n  return new Array(length).fill(0).join('');\n}\n\n/**\n * 大数，是否是一个数字，数字字符包括 - . e [0-9]\n */\nexport function isInputNumber(num: number | string): boolean {\n  if (!num) return true;\n  if (isNumber(num)) return !Number.isNaN(num);\n  const r = /^[0-9|e|E|-]+\\.*[0-9|e|E|-]*$/.test(num);\n  if (!r) return false;\n  // only allow one [.e] and two [-]\n  let eCount = 0;\n  let negativeCount = 0;\n  let dotCount = 0;\n  for (let i = 0, len = num.length; i < len; i++) {\n    if (num[i] === '.') {\n      dotCount += 1;\n      if (dotCount > 1) return false;\n    }\n    if (/(e|E)+/.test(num[i])) {\n      eCount += 1;\n      if (eCount > 1) return false;\n    }\n    if (num[i] === '-') {\n      negativeCount += 1;\n      if (negativeCount > 2) return false;\n    }\n  }\n  return true;\n}\n\n// 整数，去除前面的无效 0（本身是 0 除外）；小数去除末尾的无效 0\nexport function removeInvalidZero(num: string, decimal = false) {\n  if (num.indexOf('.') !== -1) {\n    log.error('InputNumber', 'num is not a integer number.');\n    return num;\n  }\n  if (!num || (num === '0' && decimal)) return '';\n  if (num === '0') return num;\n  return (decimal ? num.replace(/0+$/, '') : num.replace(/^0+/, '')) || '0';\n}\n\n/**\n * 大数加法，仅支持正整数（没有精度问题）\n * @param num1 被加数\n * @param num2 加数\n */\nexport function largeIntNumberAdd(num1: string, num2: string, decimal = false): string {\n  const number1 = removeInvalidZero(num1, decimal);\n  const number2 = removeInvalidZero(num2, decimal);\n  const isFirstLarger = number1.length > number2.length;\n  const maxNumber = isFirstLarger ? number1 : number2;\n  const minNumber = isFirstLarger ? number2 : number1;\n  const newNumber: string[] = [];\n  const step = [];\n  const diff = decimal ? 0 : maxNumber.length - minNumber.length;\n  const len = decimal ? minNumber.length : maxNumber.length;\n  for (let i = len - 1; i >= 0; i--) {\n    const minIndex = i - diff;\n    // 第一个数，加第二个数，加进位\n    const count = Number(maxNumber[i]) + (Number(minNumber[minIndex]) || 0) + (step[i] || 0);\n    if (count >= 10) {\n      step[i - 1] = 1;\n    }\n    newNumber.unshift(String(count % 10));\n  }\n  // 999 + 1 = 1000，之类的进位\n  if (step[-1]) {\n    newNumber.unshift('1');\n  }\n  if (decimal) {\n    return newNumber.concat(maxNumber.slice(len, maxNumber.length)).join('');\n  }\n  return newNumber.join('');\n}\n\n/**\n * 大数加法，支持小数和整数（没有精度问题）\n * @param num1 被加数\n * @param num2 加数\n */\nexport function largePositiveNumberAdd(num1: string, num2: string): string {\n  const [intNumber1 = '0', decimalNumber1 = '0'] = num1.split('.');\n  const [intNumber2 = '0', decimalNumber2 = '0'] = num2.split('.');\n  const integerSum = largeIntNumberAdd(intNumber1, intNumber2);\n  // 如果不存在小数，则直接返回整数相加结果\n  if (decimalNumber1 === '0' && decimalNumber2 === '0') return integerSum;\n  const newDecimalNumber1 = removeInvalidZero(decimalNumber1, true);\n  const newDecimalNumber2 = removeInvalidZero(decimalNumber2, true);\n  // 小数点相加\n  const decimalNumberSum = largeIntNumberAdd(newDecimalNumber1, newDecimalNumber2, true);\n  // 组合整数部分和小数部分\n  const decimalLength = decimalNumberSum.length;\n  // 如果小数相加进位\n  if (decimalLength > newDecimalNumber1.length && decimalLength > newDecimalNumber2.length) {\n    return [removeInvalidZero(largeIntNumberAdd(integerSum, '1')), removeInvalidZero(decimalNumberSum.slice(1), true)]\n      .filter((v: string) => v)\n      .join('.');\n  }\n  return [removeInvalidZero(integerSum), removeInvalidZero(decimalNumberSum, true)].filter((v: string) => v).join('.');\n}\n\n/**\n * 比较两个大数的大小，仅正整数有效\n */\nfunction compareLargeIntegerNumber(num1: string, num2: string): 1 | -1 | 0 {\n  const number1 = removeInvalidZero(num1);\n  const number2 = removeInvalidZero(num2);\n  if (number1.length === number2.length) {\n    for (let i = 0, len = number1.length; i < len; i++) {\n      if (number1[i] > number2[i]) return 1;\n      if (number1[i] < number2[i]) return -1;\n    }\n    return 0;\n  }\n  return number1.length > number2.length ? 1 : -1;\n}\n\nfunction compareLargeDecimalNumber(num1: string, num2: string) {\n  const number1 = num1 && num1 !== '0' ? num1.replace(/0+$/, '') : '0';\n  const number2 = num2 && num2 !== '0' ? num2.replace(/0+$/, '') : '0';\n  const maxLength = Math.max(number1.length, number2.length);\n  for (let i = 0, len = maxLength; i < len; i++) {\n    if ((number1[i] || 0) > (number2[i] || 0)) return 1;\n    if ((number1[i] || 0) < (number2[i] || 0)) return -1;\n  }\n  return 0;\n}\n\n/**\n * 2e3 => 2000\n * 0.2e3 => 200\n */\nexport function formatENumber(num: string): string {\n  const [num1, num2] = num.split('e');\n  if (!num2) return num;\n  const [integer, initDecimal = ''] = num.split('.');\n  const zeroCount = Number(num2);\n  const [decimal] = initDecimal.split('e');\n  if (zeroCount > decimal.length) {\n    const multipleZero = fillZero(zeroCount - decimal.length);\n    return num1.replace(/(^0+|\\.)/g, '') + multipleZero;\n  }\n  const n1 = integer.replace(/^0+/, '') + decimal.slice(0, zeroCount);\n  const d2 = decimal.slice(zeroCount);\n  return d2 ? [n1, d2].join('.') : n1;\n}\n\n/**\n * 比较两个大数的大小\n */\nexport function compareLargeNumber(num1: string, num2: string): 1 | -1 | 0 {\n  const [integer1, decimal1] = formatENumber(num1).split('.');\n  const [integer2, decimal2] = formatENumber(num2).split('.');\n  const result = compareLargeIntegerNumber(integer1.replace('-', ''), integer2.replace('-', ''));\n  const integer1IsNegative = integer1.includes('-');\n  const integer2IsNegative = integer2.includes('-');\n  if (integer1IsNegative && !integer2IsNegative) return -1;\n  if (!integer1IsNegative && integer2IsNegative) return 1;\n  if (integer1IsNegative && integer2IsNegative) {\n    if (result === 0) return 0;\n    return result > 0 ? -1 : 1;\n  }\n  if (result === 0) {\n    return compareLargeDecimalNumber(decimal1, decimal2);\n  }\n  return result;\n}\n\n// 确认是否为无限大/小\nexport function isInfinity(num: number | string) {\n  return [-Infinity, Infinity].includes(Number(num));\n}\n\n// 确认是否是大数\nexport function isSafeNumber(num: string | number) {\n  return Number(num) < Number.MAX_SAFE_INTEGER && Number(num) > Number.MIN_SAFE_INTEGER;\n}\n\n/**\n * 比较两个数的大小\n */\nexport function compareNumber(num1: string | number, num2: string | number, largeNumber?: boolean) {\n  const isSafeNumberCompare = isSafeNumber(num1) && isSafeNumber(num2) && !largeNumber;\n  const isInfinityCompare = isInfinity(num1) || isInfinity(num2);\n  if (isSafeNumberCompare || isInfinityCompare) {\n    // 比较两个非大数或涉及无穷的大小\n    if (Number(num1) === Number(num2)) return 0;\n    return Number(num1) > Number(num2) ? 1 : -1;\n  }\n  // 比较两个大数的大小\n  return compareLargeNumber(String(num1), String(num2));\n}\n\n/**\n * 大数减法，仅支持整数\n * @param num1 被减数\n * @param num2 减数\n * @param decimal 是否为小数位相减\n */\nexport function largeIntegerNumberSubtract(\n  num1: string,\n  num2: string,\n  p?: { decimal?: boolean; stayZero?: boolean; filledZero?: boolean }\n): string {\n  if (num1 === num2) return '0';\n  const { decimal, stayZero, filledZero } = p || {};\n  const number1 = filledZero ? num1 : removeInvalidZero(num1, decimal);\n  const number2 = filledZero ? num2 : removeInvalidZero(num2, decimal);\n  const isFirstLarger = compareLargeIntegerNumber(number1, number2) > 0;\n  const maxNumber = isFirstLarger ? number1 : number2;\n  const minNumber = isFirstLarger ? number2 : number1;\n  const newNumber: string[] = [];\n  // step 存储借位信息\n  const step = [];\n  const diff = decimal ? 0 : maxNumber.length - minNumber.length;\n  const len = decimal ? minNumber.length : maxNumber.length;\n  for (let i = len - 1; i >= 0; i--) {\n    const minIndex = i - diff;\n    // 第一个数，减第二个数，减借位\n    let count = Number(maxNumber[i]) - (Number(minNumber[minIndex]) || 0) - (step[i] || 0);\n    if (count < 0) {\n      step[i - 1] = 1;\n      count += 10;\n    }\n    newNumber.unshift(String(count));\n  }\n  if (decimal) {\n    return newNumber.concat(maxNumber.slice(len, maxNumber.length)).join('');\n  }\n  let finalNumber = newNumber.join('');\n  if (!stayZero) {\n    finalNumber = finalNumber.replace(/^0+/, '');\n  }\n  return removeInvalidZero(isFirstLarger ? finalNumber : `-${finalNumber}`, decimal);\n}\n\n/**\n * 大数减法，支持整数和小数（无精度问题）\n * @param num1 被减数\n * @param num2 减数\n * @param decimal 是否为小数位相减\n */\nexport function largePositiveNumberSubtract(num1: string, num2: string): string {\n  if (num1 === num2) return '0';\n  const isFirstLarger = compareNumber(num1, num2, true) > 0;\n  const maxNumber = isFirstLarger ? num1 : num2;\n  const minNumber = isFirstLarger ? num2 : num1;\n  // 整数部分和小数部分分开处理\n  const [intNumber1, decimalNumber1 = '0'] = maxNumber.split('.');\n  const [intNumber2, decimalNumber2 = '0'] = minNumber.split('.');\n  let integerNumber = largeIntegerNumberSubtract(intNumber1, intNumber2);\n  // 如果不存在小数，则直接返回整数相加结果\n  if (decimalNumber1 === '0' && decimalNumber2 === '0') {\n    return isFirstLarger ? integerNumber : `-${integerNumber}`;\n  }\n  // 小数点相减\n  let decimalNumber = '';\n  let addOneNumber = decimalNumber1;\n  const isNumber1Short = decimalNumber1.length < decimalNumber2.length;\n  // 第一个数字的小数位数比第二个少，需补足 0\n  if (isNumber1Short) {\n    addOneNumber = `${decimalNumber1}${fillZero(decimalNumber2.length - decimalNumber1.length)}`;\n  }\n  // 第一个小数位是否更大，不需要借位\n  if (compareLargeDecimalNumber(addOneNumber, decimalNumber2) >= 0) {\n    decimalNumber = largeIntegerNumberSubtract(addOneNumber, decimalNumber2, {\n      decimal: true,\n      stayZero: true,\n      filledZero: true,\n    });\n  } else {\n    if (isNumber1Short || decimalNumber1 === '0') {\n      decimalNumber = largeIntegerNumberSubtract(`1${addOneNumber}`, decimalNumber2, { stayZero: true });\n      decimalNumber = fillZero(decimalNumber2.length - decimalNumber.length) + decimalNumber;\n    } else {\n      decimalNumber = largeIntegerNumberSubtract(decimalNumber1, decimalNumber2, { decimal: true });\n    }\n    integerNumber = largeIntegerNumberSubtract(integerNumber, '1');\n  }\n  const finalNumber = decimalNumber ? [integerNumber, decimalNumber].join('.') : integerNumber;\n  return isFirstLarger ? finalNumber : `-${finalNumber}`;\n}\n\n/**\n * -0.6 - 0.8        =>  -(0.6 + 0.8)\n * -0.6 - (-0.8)     =>  0.8 - 0.6\n * 0.6 - (-0.8)      => 0.6 + 0.8\n * 0.6 - 0.8         => 0.6 - 0.8\n */\nexport function largeNumberSubtract(num1: string, num2: string): string {\n  const isFirstNegative = num1[0] === '-';\n  const isSecondNegative = num2[0] === '-';\n  if (isFirstNegative && !isSecondNegative) {\n    const r = largePositiveNumberAdd(num1.slice(1), num2);\n    return `-${r}`;\n  }\n  if (isFirstNegative && isSecondNegative) {\n    return largePositiveNumberSubtract(num2.slice(1), num1.slice(1));\n  }\n  if (!isFirstNegative && isSecondNegative) {\n    return largePositiveNumberAdd(num1, num2.slice(1));\n  }\n  return largePositiveNumberSubtract(num1, num2);\n}\n\n/**\n * -0.6 + 0.8        =>  0.8 - 0.6\n * -0.6 + (-0.8)     =>  -(0.6 + 0.8)\n * 0.6 + (-0.8)      => 0.6 - 0.8\n * 0.6 + 0.8         => 0.6 + 0.8\n */\nexport function largeNumberAdd(num1: string, num2: string): string {\n  const isFirstNegative = num1[0] === '-';\n  const isSecondNegative = num2[0] === '-';\n  if (isFirstNegative && !isSecondNegative) {\n    return largePositiveNumberSubtract(num2, num1.slice(1));\n  }\n  if (isFirstNegative && isSecondNegative) {\n    const r = largePositiveNumberAdd(num2.slice(1), num1.slice(1));\n    return `-${r}`;\n  }\n  if (!isFirstNegative && isSecondNegative) {\n    return largePositiveNumberSubtract(num1, num2.slice(1));\n  }\n  return largePositiveNumberAdd(num1, num2);\n}\n\n/**\n * 格式化小数，并且可以控制小数点后的位数和是否进行四舍五入。\n *\n * @param {number} num - 要格式化的数字。\n * @param {number} places - 小数点后的位数。\n * @param {boolean} rounding - 是否进行四舍五入。\n * @returns {string} 格式化后的数字字符串。\n */\nexport function formatDecimal(num: number, places: number, enableRound: boolean = true) {\n  // 开启四舍五入 直接用 toFixed\n  if (enableRound) {\n    return num.toFixed(places);\n  }\n\n  const [integer, decimal] = num.toString().split('.');\n  // 保留 0 位小数\n  if (places === 0) {\n    return integer;\n  }\n  // 补足小数位数\n  if (decimal) {\n    let decimalNumber = decimal.slice(0, places);\n    if (decimal.length < places) {\n      decimalNumber += fillZero(places - decimal.length);\n    }\n    return [integer, decimalNumber].join('.');\n  }\n\n  return [integer, fillZero(places)].join('.');\n}\n\nexport function decimalPlacesToFixedNum(num: number, decimalPlaces: InputNumberDecimalPlaces) {\n  if (isObject(decimalPlaces)) {\n    return formatDecimal(num, decimalPlaces.places, decimalPlaces.enableRound ?? true);\n  }\n  return formatDecimal(num, decimalPlaces, true);\n}\n\n/**\n * 大数保留 N 位小数（没有精度问题）\n * @param {String} number 大数（只能使用字符串表示）\n * @param {Number} decimalPlaces 保留的小数位数\n * @param {Boolean} largeNumber 是否为大数\n */\nexport function largeNumberToFixed(\n  number: string | number,\n  decimalPlaces: InputNumberDecimalPlaces = 0,\n  largeNumber: boolean = true\n): string {\n  if (Number.isNaN(Number(number))) return '';\n  if (!largeNumber) {\n    return decimalPlacesToFixedNum(Number(number), decimalPlaces);\n  }\n  const places = isObject(decimalPlaces) ? decimalPlaces.places : decimalPlaces;\n  const enableRound = isObject(decimalPlaces) ? (decimalPlaces.enableRound ?? true) : true;\n  if (!isString(number)) return String(number);\n  // eslint-disable-next-line prefer-const\n  let [num1, num2] = number.split('.');\n  // 如果不存在小数点，则补足位数\n  if (!num2) {\n    return places > 0 && enableRound ? [number, fillZero(places)].join('.') : number;\n  }\n  // 存在小数点，保留 0 位小数，灵活配置四舍五入\n  if (places === 0) {\n    return enableRound && Number(num2[0]) >= 5 ? largePositiveNumberAdd(num1, '1') : num1;\n  }\n  // 存在小数点，保留 > 0 位小数，灵活配置四舍五入\n  let decimalNumber = num2.slice(0, places);\n  if (num2.length < places) {\n    decimalNumber += fillZero(places - num2.length);\n  } else if (enableRound) {\n    // 用于判断是否处于 1.08 这种小数为0开始的边界情况\n    const leadZeroNum = decimalNumber.match(/^0+/)?.[0].length;\n    // 用于判断是否处于 0.99/1.99 等需要往非0位进位的场景\n    const leadNineNum = decimalNumber.match(/^9+/);\n    // 决定是否需要四舍五入\n    const needAdded = Number(num2[places]) >= 5;\n\n    // 四舍五入后的结果\n    decimalNumber = needAdded ? largePositiveNumberAdd(decimalNumber, '1') : decimalNumber;\n\n    // 边界场景1（1.08 这种小数为0开始的边界情况）：计算后有误判的可能，如008 +1 误判为 8+1，需要手动补 0\n    if (leadZeroNum && needAdded && leadZeroNum + decimalNumber.length >= places) {\n      decimalNumber = `${fillZero(places - decimalNumber.length)}${decimalNumber}`;\n    }\n    // 边界场景2:（0.99 这种可能进位的边界情况）：计算后有误判的可能，如995 四舍五入后需进位\n    if (leadNineNum && decimalNumber.length > places) {\n      num1 = (Number(num1) + 1).toString();\n      decimalNumber = fillZero(places);\n    }\n  }\n  return [num1, decimalNumber].join('.');\n}\n"],"names":["fillZero","length","Array","fill","join","isInputNumber","num","isNumber","Number","isNaN","r","test","eCount","negativeCount","dotCount","i","len","removeInvalidZero","decimal","arguments","undefined","indexOf","log","error","replace","largeIntNumberAdd","num1","num2","number1","number2","isFirstLarger","maxNumber","minNumber","newNumber","step","diff","minIndex","count","unshift","String","concat","slice","largePositiveNumberAdd","_num1$split","split","_num1$split2","_slicedToArray","_num1$split2$","intNumber1","_num1$split2$2","decimalNumber1","_num2$split","_num2$split2","_num2$split2$","intNumber2","_num2$split2$2","decimalNumber2","integerSum","newDecimalNumber1","newDecimalNumber2","decimalNumberSum","decimalLength","filter","v","compareLargeIntegerNumber","compareLargeDecimalNumber","maxLength","Math","max","formatENumber","_num$split","_num$split2","_num$split3","_num$split4","integer","_num$split4$","initDecimal","zeroCount","_initDecimal$split","_initDecimal$split2","multipleZero","n1","d2","compareLargeNumber","_formatENumber$split","_formatENumber$split2","integer1","decimal1","_formatENumber$split3","_formatENumber$split4","integer2","decimal2","result","integer1IsNegative","includes","integer2IsNegative","isInfinity","Infinity","isSafeNumber","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","compareNumber","largeNumber","isSafeNumberCompare","isInfinityCompare","largeIntegerNumberSubtract","p","_ref","stayZero","filledZero","finalNumber","largePositiveNumberSubtract","_maxNumber$split","_maxNumber$split2","_maxNumber$split2$","_minNumber$split","_minNumber$split2","_minNumber$split2$","integerNumber","decimalNumber","addOneNumber","isNumber1Short","largeNumberSubtract","isFirstNegative","isSecondNegative","largeNumberAdd","formatDecimal","places","enableRound","toFixed","_num$toString$split","toString","_num$toString$split2","decimalPlacesToFixedNum","decimalPlaces","isObject","_decimalPlaces$enable","largeNumberToFixed","number","_decimalPlaces$enable2","isString","_number$split","_number$split2","_decimalNumber$match","leadZeroNum","match","leadNineNum","needAdded"],"mappings":"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"}