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.
		
		
		
		
		
			
		
			
				
					36 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					36 lines
				
				1.2 KiB
			| 
											3 years ago
										 | var root = require('./_root'), | ||
|  |     toInteger = require('./toInteger'), | ||
|  |     toNumber = require('./toNumber'), | ||
|  |     toString = require('./toString'); | ||
|  | 
 | ||
|  | /* Built-in method references for those with the same name as other `lodash` methods. */ | ||
|  | var nativeIsFinite = root.isFinite, | ||
|  |     nativeMin = Math.min; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Creates a function like `_.round`. | ||
|  |  * | ||
|  |  * @private | ||
|  |  * @param {string} methodName The name of the `Math` method to use when rounding. | ||
|  |  * @returns {Function} Returns the new round function. | ||
|  |  */ | ||
|  | function createRound(methodName) { | ||
|  |   var func = Math[methodName]; | ||
|  |   return function(number, precision) { | ||
|  |     number = toNumber(number); | ||
|  |     precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); | ||
|  |     if (precision && nativeIsFinite(number)) { | ||
|  |       // Shift with exponential notation to avoid floating-point issues.
 | ||
|  |       // See [MDN](https://mdn.io/round#Examples) for more details.
 | ||
|  |       var pair = (toString(number) + 'e').split('e'), | ||
|  |           value = func(pair[0] + 'e' + (+pair[1] + precision)); | ||
|  | 
 | ||
|  |       pair = (toString(value) + 'e').split('e'); | ||
|  |       return +(pair[0] + 'e' + (+pair[1] - precision)); | ||
|  |     } | ||
|  |     return func(number); | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = createRound; |