util-helpers
Version:
79 lines (75 loc) • 2.21 kB
JavaScript
;
var ut2 = require('ut2');
var devWarn = require('./devWarn.js');
var radixReg = /^[-+]?0[b|o|x]\d+/i;
var dotNumberStringReg = /^\.\d+/;
function transformEffectiveNumber(value) {
var ret;
if (ut2.isString(value)) {
ret = value.trim();
if (ret === '') {
ret = Number(ret);
}
else if (radixReg.test(ret) || dotNumberStringReg.test(ret)) {
ret = ut2.toNumber(ret);
}
else if (ut2.isNaN(Number(ret))) {
ret = Number.NaN;
}
}
else if (ut2.isSymbol(value)) {
ret = Number.NaN;
}
else if (!ut2.isNumber(value)) {
ret = Number(value);
}
else {
ret = value;
}
if (ut2.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 > ut2.MAX_SAFE_INTEGER || +num < ut2.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;
}
exports.checkBoundary = checkBoundary;
exports.digitLength = digitLength;
exports.float2Fixed = float2Fixed;
exports.isScientificNumber = isScientificNumber;
exports.strip = strip;
exports.transformEffectiveNumber = transformEffectiveNumber;
exports.trimLeftZero = trimLeftZero;