util-helpers
Version:
71 lines (68 loc) • 2.08 kB
JavaScript
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 };