summaryrefslogtreecommitdiff
path: root/node_modules/locutus/php/math/round.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/locutus/php/math/round.js')
-rw-r--r--node_modules/locutus/php/math/round.js62
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