{"version":3,"file":"number.mjs","sources":["../../../../src/_common/js/input-number/number.ts"],"sourcesContent":["import isUndefined from 'lodash/isUndefined';\n/** 普通数相关方法 */\nimport isString from 'lodash/isString';\nimport isNumber from 'lodash/isNumber';\nimport {\n  compareNumber,\n  formatENumber,\n  largeNumberToFixed,\n  isInputNumber,\n  largeNumberAdd,\n  largeNumberSubtract,\n} from './large-number';\nimport log from '../log';\n\nexport * from './large-number';\n\nexport type NumberType = number | string;\n\n// 小于最大值，才允许继续添加\nexport function canAddNumber(\n  num: NumberType,\n  max: NumberType,\n  largeNumber = false\n): boolean {\n  if (!num && num !== 0) return true;\n  if (largeNumber && isString(num)) {\n    return compareNumber(num, max, largeNumber) < 0;\n  }\n  return num < max;\n}\n\n// 大于最小值，才允许继续减少\nexport function canReduceNumber(\n  num: NumberType,\n  min: NumberType,\n  largeNumber = false\n): boolean {\n  if (!num && num !== 0) return true;\n  if (largeNumber && isString(num)) {\n    return compareNumber(num, min, largeNumber) > 0;\n  }\n  return num > min;\n}\n\n/**\n * 将数字控制在 max 和 min 之间\n */\nexport function putInRangeNumber(\n  val: NumberType,\n  params: {\n    max?: NumberType;\n    min?: NumberType;\n    lastValue?: NumberType;\n    largeNumber?: boolean;\n  }\n) {\n  if (val === '') return undefined;\n  const { max, min, lastValue, largeNumber } = params;\n  if (!isInputNumber(val)) return lastValue;\n  if (largeNumber && (isString(max) || max === Infinity) && (isString(min) || min === -Infinity)) {\n    if (compareNumber(max, val, largeNumber) < 0) return max;\n    if (compareNumber(min, val, largeNumber) > 0) return min;\n    return val;\n  }\n  return Math.max(Number(min), Math.min(Number(max), Number(val)));\n}\n\n/**\n * 仅支持正数，小数加法精度处理，小数部分和整数部分分开处理\n */\nexport function positiveAdd(num1: number, num2: number): number {\n  if (!num1 || !num2) return (num1 || 0) + (num2 || 0);\n  const r1 = num1.toString().split('.')[1]?.length || 0;\n  const r2 = num2.toString().split('.')[1]?.length || 0;\n  // 整数不存在精度问题，直接返回\n  if (!r1 && !r2) return num1 + num2;\n  let newNumber1 = num1;\n  let newNumber2 = num2;\n  const diff = Math.abs(r1 - r2);\n  const digit = 10 ** Math.max(r1, r2);\n  if (diff > 0) {\n    const cm = 10 ** diff;\n    if (r1 > r2) {\n      newNumber1 = Number(num1.toString().replace('.', ''));\n      newNumber2 = Number(num2.toString().replace('.', '')) * cm;\n    } else {\n      newNumber1 = Number(num1.toString().replace('.', '')) * cm;\n      newNumber2 = Number(num2.toString().replace('.', ''));\n    }\n  } else {\n    newNumber1 = Number(num1.toString().replace('.', ''));\n    newNumber2 = Number(num2.toString().replace('.', ''));\n  }\n  return (newNumber1 + newNumber2) / digit;\n}\n\n/**\n * 正数，小数减法精度处理，小数部分和整数部分分开处理\n */\nexport function positiveSubtract(num1: number, num2: number): number {\n  if (!num1 || !num2) return (num1 || 0) - (num2 || 0);\n  const r1 = num1.toString().split('.')[1]?.length || 0;\n  const r2 = num2.toString().split('.')[1]?.length || 0;\n  const digit = 10 ** Math.max(r1, r2);\n  const n = r1 >= r2 ? r1 : r2;\n  return Number(((num1 * digit - num2 * digit) / digit).toFixed(n));\n}\n\n/**\n * 支持正数、负数、小数等全部数字的加法\n * -0.766 + 1       =>   1 - 0.766\n * -1 + (-0.766)    =>   - (1 + 0.766)\n * 1 + (-0.766)     =>   1 - 0.766\n * 1 + 0.766        =>   1 + 0.766\n */\nexport function add(num1: number, num2: number): number {\n  if (num1 < 0 && num2 > 0) return positiveSubtract(num2, Math.abs(num1));\n  if (num1 < 0 && num2 < 0) return positiveAdd(Math.abs(num1), Math.abs(num2)) * -1;\n  if (num1 > 0 && num2 < 0) return positiveSubtract(num1, Math.abs(num2));\n  return positiveAdd(num1, num2);\n}\n\n/**\n * 支持正数、负数、小数等全部数字的减法\n * -0.766 - 1       =>   - (1 + 0.766)\n * -1 - (-0.766)    =>   0.766 - 1\n * 1 - (-0.766)     =>   1 + 0.766\n * 1 - 0.766        =>   1 - 0.766\n */\nexport function subtract(num1: number, num2: number): number {\n  if (num1 < 0 && num2 > 0) return positiveAdd(Math.abs(num1), num2) * -1;\n  if (num1 < 0 && num2 < 0) return positiveSubtract(Math.abs(num2), Math.abs(num1));\n  if (num1 > 0 && num2 < 0) return positiveAdd(num1, Math.abs(num2));\n  return positiveSubtract(num1, num2);\n}\n\nexport function getStepValue(p: {\n  op: 'add' | 'reduce';\n  step: NumberType;\n  max?: NumberType;\n  min?: NumberType;\n  lastValue?: NumberType;\n  largeNumber?: boolean;\n}) {\n  const { op, step, lastValue, max, min, largeNumber } = p;\n  if (step <= 0) {\n    log.error('InputNumber', 'step must be larger than 0.');\n    return lastValue;\n  }\n  const tStep = isNumber(step) ? String(step) : step;\n  let newVal;\n  if (op === 'add') {\n    if (largeNumber && isString(lastValue)) {\n      newVal = largeNumberAdd(String(lastValue), String(tStep));\n    } else {\n      newVal = add(Number(lastValue || 0), Number(step));\n    }\n  } else if (op === 'reduce') {\n    if (largeNumber && isString(lastValue)) {\n      newVal = largeNumberSubtract(String(lastValue), String(tStep));\n    } else {\n      newVal = subtract(Number(lastValue || 0), Number(step));\n    }\n  }\n  if (isUndefined(lastValue)) {\n    newVal = putInRangeNumber(newVal, { max, min, lastValue, largeNumber });\n  }\n  return largeNumber ? newVal : Number(newVal);\n}\n\nexport type InputNumberErrorType =\n  | 'exceed-maximum'\n  | 'below-minimum'\n  | undefined;\n\n/**\n * 最大值和最小值校验\n */\nexport function getMaxOrMinValidateResult(p: {\n  largeNumber: boolean;\n  value: NumberType;\n  max: NumberType;\n  min: NumberType;\n}): InputNumberErrorType {\n  const { largeNumber, value, max, min } = p;\n  if (isUndefined(largeNumber)) return undefined;\n  if (largeNumber && isNumber(value)) {\n    log.warn('InputNumber', 'largeNumber value must be a string.');\n  }\n  let error: InputNumberErrorType;\n  if (compareNumber(value, max, largeNumber) > 0) {\n    error = 'exceed-maximum';\n  } else if (compareNumber(value, min, largeNumber) < 0) {\n    error = 'below-minimum';\n  } else {\n    error = undefined;\n  }\n  return error;\n}\n\nexport const specialCode = ['-', '.', 'e', 'E', '+'];\n\n/**\n * 是否允许输入当前字符，输入字符校验\n * 1.23E+08 就表示 1.23 乘 10 的 8 次方\n * 2e3 表示 2 乘 10 的 3 次方\n */\nexport function canInputNumber(number: string, largeNumber: boolean) {\n  if (['', null, undefined].includes(number)) return true;\n  // 数字最前方不允许出现连续的两个 0\n  if (number.slice(0, 2) === '00') return false;\n  // 只能出现一个点（.）\n  if (number.match(/\\./g)?.length > 1) return false;\n  // 只能出现一个负号（-）或 一个正号（+），并且在第一个位置；但允许 3e+10 这种形式\n  const tmpNumber = number.slice(1);\n  if (/(\\+|-)/.test(tmpNumber) && !/e+/i.test(tmpNumber)) return false;\n  // 允许输入数字字符\n  const isNumber = (largeNumber && isInputNumber(number)) || !Number.isNaN(Number(number));\n  if (!isNumber && !specialCode.includes(number.slice(-1))) return false;\n  if (/e/i.test(number) && !/\\de/i.test(number)) return false;\n  return true;\n}\n\n/**\n * 是否允许设置组件新值，触发 onChange 事件\n */\nexport function canSetValue(number: string, lastNumber: number) {\n  return parseFloat(number) !== lastNumber && !Number.isNaN(Number(number));\n}\n\n/**\n * 1. 格式化未输入完成的数字，如：如：2e/2+/2.等\n * 2. 处理小数点 decimalPlaces\n * 3. 格式化大数字 formatENumber\n */\nexport function formatUnCompleteNumber(\n  number: string,\n  extra: {\n    decimalPlaces?: number;\n    largeNumber?: boolean;\n    isToFixed?: boolean;\n  } = {}\n): number | string {\n  if (['', null, undefined].includes(number) || !/\\d+/.test(number)) return undefined;\n  const { decimalPlaces, largeNumber, isToFixed } = extra;\n  let newNumber = number.replace(/[.|+|\\-|e]$/, '');\n  if (largeNumber) {\n    newNumber = formatENumber(newNumber);\n  }\n  if (decimalPlaces !== undefined) {\n    newNumber = largeNumberToFixed(newNumber, decimalPlaces, largeNumber);\n  }\n  if (largeNumber) return newNumber;\n  return isToFixed ? newNumber : parseFloat(newNumber);\n}\n\n/**\n * 对千分位进行处理 111,111,222 -> 111111222\n */\nexport function formatThousandths(number: string) {\n  const thousandthsRegExp = /^[-+]?\\d{1,3}(,\\d{3})*(\\.(\\d*))?$/;\n  if (thousandthsRegExp.test(number)) return number.replace(/,/g, '');\n  return number;\n}\n"],"names":["isString","newNumber1","newNumber2","log","isNumber","newVal","isUndefined","max","min","lastValue","largeNumber","error","newNumber"],"mappings":"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"}