diff options
Diffstat (limited to 'node_modules/locutus/php/math/round.js')
-rw-r--r-- | node_modules/locutus/php/math/round.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/node_modules/locutus/php/math/round.js b/node_modules/locutus/php/math/round.js new file mode 100644 index 0000000..372bc5b --- /dev/null +++ b/node_modules/locutus/php/math/round.js @@ -0,0 +1,62 @@ +'use strict'; + +module.exports = function round(value, precision, mode) { + // discuss at: http://locutus.io/php/round/ + // original by: Philip Peterson + // revised by: Onno Marsman (https://twitter.com/onnomarsman) + // revised by: T.Wild + // revised by: RafaĆ Kukawski (http://blog.kukawski.pl) + // input by: Greenseed + // input by: meo + // input by: William + // input by: Josep Sanz (http://www.ws3.es/) + // bugfixed by: Brett Zamir (http://brett-zamir.me) + // note 1: Great work. Ideas for improvement: + // note 1: - code more compliant with developer guidelines + // note 1: - for implementing PHP constant arguments look at + // note 1: the pathinfo() function, it offers the greatest + // note 1: flexibility & compatibility possible + // example 1: round(1241757, -3) + // returns 1: 1242000 + // example 2: round(3.6) + // returns 2: 4 + // example 3: round(2.835, 2) + // returns 3: 2.84 + // example 4: round(1.1749999999999, 2) + // returns 4: 1.17 + // example 5: round(58551.799999999996, 2) + // returns 5: 58551.8 + + var m, f, isHalf, sgn; // helper variables + // making sure precision is integer + precision |= 0; + m = Math.pow(10, precision); + value *= m; + // sign of the number + sgn = value > 0 | -(value < 0); + isHalf = value % 1 === 0.5 * sgn; + f = Math.floor(value); + + if (isHalf) { + switch (mode) { + case 'PHP_ROUND_HALF_DOWN': + // rounds .5 toward zero + value = f + (sgn < 0); + break; + case 'PHP_ROUND_HALF_EVEN': + // rouds .5 towards the next even integer + value = f + f % 2 * sgn; + break; + case 'PHP_ROUND_HALF_ODD': + // rounds .5 towards the next odd integer + value = f + !(f % 2); + break; + default: + // rounds .5 away from zero + value = f + (sgn > 0); + } + } + + return (isHalf ? value : Math.round(value)) / m; +}; +//# sourceMappingURL=round.js.map
\ No newline at end of file |