You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					64 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					64 lines
				
				1.7 KiB
			| 
											3 years ago
										 | '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)); | ||
|  | }; |