UNPKG

util-helpers

Version:

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

79 lines (75 loc) 2.21 kB
'use strict'; 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;