UNPKG

util-helpers

Version:

一个基于业务场景的工具方法库

71 lines (68 loc) 2.08 kB
import { isString, toNumber, isNaN, isSymbol, isNumber, MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from 'ut2'; import devWarn from './devWarn.js'; var radixReg = /^[-+]?0[b|o|x]\d+/i; var dotNumberStringReg = /^\.\d+/; function transformEffectiveNumber(value) { var ret; if (isString(value)) { ret = value.trim(); if (ret === '') { ret = Number(ret); } else if (radixReg.test(ret) || dotNumberStringReg.test(ret)) { ret = toNumber(ret); } else if (isNaN(Number(ret))) { ret = Number.NaN; } } else if (isSymbol(value)) { ret = Number.NaN; } else if (!isNumber(value)) { ret = Number(value); } else { ret = value; } if (isNaN(ret)) { return Number.NaN; } return ret; } function isScientificNumber(num) { return /\d+\.?\d*e[+-]*\d+/i.test(num); } function strip(num, precision) { if (precision === void 0) { precision = 12; } return +parseFloat(num.toPrecision(precision)); } function digitLength(num) { var eSplit = num.toString().split(/e/i); var len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0); return len > 0 ? len : 0; } function float2Fixed(num) { var strNum = String(num); if (!isScientificNumber(strNum)) { return Number(strNum.replace('.', '')); } var dLen = digitLength(num); return dLen > 0 ? strip(+num * Math.pow(10, dLen)) : +num; } function checkBoundary(num) { if (+num > MAX_SAFE_INTEGER || +num < MIN_SAFE_INTEGER) { devWarn("".concat(num, " is beyond boundary when transfer to integer, the results may not be accurate")); } } function trimLeftZero(num) { var reg = /^([+-])?(0+)([0-9.]+)$/; var result = reg.exec(num); var sign; if (result) { sign = result[1] || ''; return sign + (result[3][0] === '.' ? '0' + result[3] : result[3]); } return num; } export { checkBoundary, digitLength, float2Fixed, isScientificNumber, strip, transformEffectiveNumber, trimLeftZero };