/** * 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) { const func = Math[methodName] return (number, precision) => { precision = precision == null ? 0 : Math.min(precision, 292) if (precision) { // Shift with exponential notation to avoid floating-point issues. // See [MDN](https://mdn.io/round#Examples) for more details. let pair = `${ number }e`.split('e') const value = func(`${ pair[0] }e${ +pair[1] + precision }`) pair = `${ value }e`.split('e') return +`${ pair[0] }e${ +pair[1] - precision }` } return func(number) } } export default createRound