hexo/node_modules/utility/number.js

64 lines
1.7 KiB
JavaScript

'use strict';
// http://www.2ality.com/2013/10/safe-integers.html
// http://es6.ruanyifeng.com/#docs/number
exports.MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1;
exports.MIN_SAFE_INTEGER = -exports.MAX_SAFE_INTEGER;
var MAX_SAFE_INTEGER_STR = exports.MAX_SAFE_INTEGER_STR = String(exports.MAX_SAFE_INTEGER);
var MAX_SAFE_INTEGER_STR_LENGTH = MAX_SAFE_INTEGER_STR.length;
/**
* Detect a number string can safe convert to Javascript Number.
*
* @param {String} s number format string, like `"123"`, `"-1000123123123123123123"`
* @return {Boolean}
*/
exports.isSafeNumberString = function isSafeNumberString(s) {
if (s[0] === '-') {
s = s.substring(1);
}
if (s.length < MAX_SAFE_INTEGER_STR_LENGTH ||
(s.length === MAX_SAFE_INTEGER_STR_LENGTH && s <= MAX_SAFE_INTEGER_STR)) {
return true;
}
return false;
};
/**
* Convert string to Number if string in safe Number scope.
*
* @param {String} s number format string.
* @return {Number|String} success will return Number, otherise return the original string.
*/
exports.toSafeNumber = function toSafeNumber(s) {
if (typeof s === 'number') {
return s;
}
return exports.isSafeNumberString(s) ? Number(s) : s;
};
/**
* Produces a random integer between the inclusive `lower` and `upper` bounds.
*
* @param {Number} lower The lower bound.
* @param {Number} upper The upper bound.
* @return {Number} Returns the random number.
*/
exports.random = function random(lower, upper) {
if (lower === undefined && upper === undefined) {
return 0;
}
if (upper === undefined) {
upper = lower;
lower = 0;
}
var temp;
if (lower > upper) {
temp = lower;
lower = upper;
upper = temp;
}
return Math.floor(lower + Math.random() * (upper - lower));
};