|  | 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; |