(function(global, undefined) { var kafe = global.kafe, $ = kafe.dependencies.jQuery; kafe.bonify({name:'number', version:'1.0.0', obj:(function(){ /** * ### Version 1.0.0 * Additionnal manipulation methods for numbers. * * @module kafe * @class kafe.number */ var number = {}; /** * Converts a number to its roman numeral value. * * @method toRoman * @param {Number} number * @return {String} The roman numeral value. * @example * kafe.number.toRoman(1954); * // returns "MCMLIV" */ number.toRoman = function(n) { var // repeat string n times repeat = function (s,nb) { return new Array(Number(nb)+1).join(s); }, data = {M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1}, result = '' ; // transform to int n = parseInt(n,10); // foreach numeral for (var i in data) { var matches = parseInt(n / data[i], 10); if (!!matches) { result += repeat(i, matches); n = n % data[i]; } } return result; }; /** * Gets the float precision of a given number. * * @method getPrecision * @param {Number} number * @return {Number} Amount of numbers after the radix point. * @example * kafe.number.getPrecision(5.458); * // returns 3 * @example * kafe.number.getPrecision(11); * // returns 0 */ number.getPrecision = function(n) { var _precision = (n + '').split('.')[1]; return !!_precision ? _precision.length : 0; }; /** * Modifies, if needed, a number to only allow a miximum float precision. * * @method trimPrecision * @param {Number} number * @param {Number} precision Maximum amount of numbers after the radix point. * @return {Number} The modified number * @example * kafe.number.trimPrecision(5.458, 2); * // returns 5.45 * @example * kafe.number.trimPrecision(5.458, 0); * // returns 5 * @example * kafe.number.trimPrecision(5.458, 6); * // returns 5.458 */ number.trimPrecision = function(n, precision) { return Math.floor(n * Math.pow(10, precision)) / Math.pow(10, precision); }; /** * Multiply two numbers while avoiding the javascript multiplication irregularities. * * @method product * @param {Number} number * @param {Number} factor The factor causing the javascript calculation irregularity. * @return {Number} Product of the equation. * @example * 3 * 5.3 * // returns 15.8999999 * @example * kafe.number.product(3, 5.3); * // returns 15.9 */ number.product = function(n, factor) { var _power = Math.pow(10, number.getPrecision(factor)); return (n * (factor * _power)) / _power; }; return number; })()}); })(typeof window !== 'undefined' ? window : this);