UNPKG

tdesign-mobile-vue

Version:
1 lines 19.7 kB
{"version":3,"file":"number.mjs","sources":["../../../../src/_common/js/input-number/number.ts"],"sourcesContent":["import { isUndefined, isString, isNumber } from 'lodash-es';\n/** 普通数相关方法 */\nimport {\n compareNumber,\n formatENumber,\n largeNumberToFixed,\n isInputNumber,\n largeNumberAdd,\n largeNumberSubtract,\n} from './large-number';\nimport log from '../log';\nimport type { InputNumberDecimalPlaces } from './large-number';\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 (Number(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(value) || 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 | undefined | null, 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(/\\s/g)) return false;\n // 只能出现一个点(.)\n if (number.match(/\\./g)?.length > 1) return false;\n // 只能出现一个e(e)\n if (number.match(/e/g)?.length > 1) return false;\n // 只能出现一个负号(-)或 一个正号(+),并且在第一个位置;但允许 3e+10 这种形式\n const tmpNumber = number.slice(1);\n const tmpMatched = tmpNumber.match(/(\\+|-)/g);\n if (tmpMatched && (!/e(\\+|-)/i.test(tmpNumber) || tmpMatched.length > 1)) 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) || /e\\./.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?: InputNumberDecimalPlaces;\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":["canAddNumber","num","max","largeNumber","arguments","length","undefined","isString","compareNumber","canReduceNumber","min","putInRangeNumber","val","params","lastValue","isInputNumber","Infinity","Math","Number","positiveAdd","num1","num2","_num1$toString$split$","_num2$toString$split$","r1","toString","split","r2","newNumber1","newNumber2","diff","abs","digit","pow","cm","replace","positiveSubtract","_num1$toString$split$2","_num2$toString$split$2","n","toFixed","add","subtract","getStepValue","p","op","step","log","error","tStep","isNumber","String","newVal","largeNumberAdd","largeNumberSubtract","isUndefined","getMaxOrMinValidateResult","value","warn","specialCode","canInputNumber","number","_number$match","_number$match2","includes","slice","match","tmpNumber","tmpMatched","test","isNaN","canSetValue","lastNumber","parseFloat","formatUnCompleteNumber","extra","decimalPlaces","isToFixed","newNumber","formatENumber","largeNumberToFixed","formatThousandths","thousandthsRegExp"],"mappings":"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"}