Math.ceil10(55, 2)
returns 100
where 2
expresses an exponent for 10^2
. Besides of logarithmic adjustment we can use modulo based adjustment. It is almost the same as above but uses an arbitrary number for adjustment.
/** * Modulo base adjustment of a number * * Math.floorModulo(value, modulo) * Math.ceilModulo(value, modulo) * Math.roundModulo(value, modulo) * * @param {number} value The number * @param {number} modulo The modulo * @return {number] The adjusted value */ (function() { var names = ['floor', 'ceil', 'round']; for (var i = 0; i < names.length; i++) { var name = names[i]; (function(name, method) { //Math[name] = Math[name + 'Modulo'] = function(value, modulo) { return arguments.length < 2 ? method(value) : method(value / modulo) * modulo; }; })(name, Math[name]); } })(); // Floor Math.floorModulo(5, 5); // 5 Math.floorModulo(6, 5); // 5 Math.floorModulo(7, 5); // 5 Math.floorModulo(8, 5); // 5 Math.floorModulo(9, 5); // 5 Math.floorModulo(10, 5); // 10 // Ceil Math.ceilModulo(5, 5); // 5 Math.ceilModulo(6, 5); // 10 Math.ceilModulo(7, 5); // 10 Math.ceilModulo(8, 5); // 10 Math.ceilModulo(9, 5); // 10 Math.ceilModulo(10, 5); // 10 // Round Math.roundModulo(5, 5); // 5 Math.roundModulo(6, 5); // 5 Math.roundModulo(7, 5); // 5 Math.roundModulo(8, 5); // 10 Math.roundModulo(9, 5); // 10 Math.roundModulo(10, 5); // 10
JavaScript – Rounding with Precision is another implementation of number adjustment by Chris West.
ReplyDelete