import toInteger from '../toInteger.js'; import toNumber from '../toNumber.js'; import toString from '../toString.js'; /** * 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) => { number = toNumber(number); precision = precision == null ? 0 : Math.min(toInteger(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 = `${ toString(number) }e`.split('e'); const value = func(`${ pair[0] }e${ +pair[1] + precision }`); pair = `${ toString(value) }e`.split('e'); return +`${ pair[0] }e${ +pair[1] - precision }`; } return func(number); }; } export default createRound;