- function round (value, precision, mode) {
- // http://kevin.vanzonneveld.net
- // + original by: Philip Peterson
- // + revised by: Onno Marsman
- // + input by: Greenseed
- // + revised by: T.Wild
- // + input by: meo
- // + input by: William
- // + bugfixed by: Brett Zamir (http://brett-zamir.me)
- // + input by: Josep Sanz (http://www.ws3.es/)
- // + revised by: Rafaإ‚ Kukawski (http://blog.kukawski.pl/)
- /)// % note 1: Great work. Ideas for improvement:
- t:// % note 1: - code more compliant with developer guidelines
- es// % note 1: - for implementing PHP constant arguments look at
- at// % note 1: the pathinfo() function, it offers the greatest
- st// % note 1: flexibility & compatibility possible
- le// * example 1: round(1241757, -3);
- );// * returns 1: 1242000
- 00// * example 2: round(3.6);
- );// * returns 2: 4
- 4// * example 3: round(2.835, 2);
- );// * returns 3: 2.84
- 84// * example 4: round(1.1749999999999, 2);
- );// * returns 4: 1.17
- 17// * example 5: round(58551.799999999996, 2);
- );// * returns 5: 58551.8
- .8
- var m, f, isHalf, sg// helper variables
- es
- precision |= // making sure precision is integer
- er
- m = Math.pow(10, precision);
- value *= m;
- sgn = (value > 0) | -(value < 0// sign of the number
- er
- isHalf = value % 1 === 0.5 * sgn;
- f = Math.floor(value);
- if (isHalf) {
- switch (mode) {
- case '2':
- case 'PHP_ROUND_HALF_DOWN':
- value = f + (sgn < 0// rounds .5 toward zero
- ro
- break;
- case '3':
- case 'PHP_ROUND_HALF_EVEN':
- value = f + (f % 2 * sgn// rouds .5 towards the next even integer
- er
- break;
- case '4':
- case 'PHP_ROUND_HALF_ODD':
- value = f + !(f % 2// rounds .5 towards the next odd integer
- er
- break;
- default:
- value = f + (sgn > 0// rounds .5 away from zero
- ro
- }
- }
- return (isHalf ? value : Math.round(value)) / m
Raw Paste