UNPKG

@newdash/newdash

Version:

javascript/typescript utility library

33 lines (32 loc) 1.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const toNumber_1 = __importDefault(require("../toNumber")); const toInteger_1 = __importDefault(require("../toInteger")); const toString_1 = require("../toString"); /** * Creates a function like `round`. * * @ignore * @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 = (0, toNumber_1.default)(number); precision = precision == null ? 0 : Math.min((0, toInteger_1.default)(precision), 292); if (precision && isFinite(number)) { // Shift with exponential notation to avoid floating-point issues. // See [MDN](https://mdn.io/round#Examples) for more details. var pair = ((0, toString_1.toString)(number) + 'e').split('e'), value = func(pair[0] + 'e' + (+pair[1] + precision)); pair = ((0, toString_1.toString)(value) + 'e').split('e'); return +(pair[0] + 'e' + (+pair[1] - precision)); } return func(number); }; } exports.default = createRound;