NLeSC/ahn-pointcloud-viewer

View on GitHub
app/scripts/utils/decimaladjust.service.js

Summary

Maintainability
A
1 hr
Test Coverage
(function() {
  'use strict';

    function DecimalAdjust() {
        /**
         * Decimal adjustment of a number.
         *
         * @param {String}
         *          type The type of adjustment.
         * @param {Number}
         *          value The number.
         * @param {Integer}
         *          exp The exponent (the 10 logarithm of the adjustment base).
         * @returns {Number} The adjusted value.
         */
        function decimalAdjust(type, value, exp) {
            // If the exp is undefined or zero...
            if (typeof exp === 'undefined' || +exp === 0) {
                return Math[type](value);
            }
            value = +value;
            exp = +exp;
            // If the value is not a number or the exp is not an integer...
            if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
                return NaN;
            }
            // Shift
            value = value.toString().split('e');
            value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
            // Shift back
            value = value.toString().split('e');
            return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
        }

        // Decimal round
        if (!Math.round10) {
            Math.round10 = function(value, exp) {
                return decimalAdjust('round', value, exp);
            };
        }
        // Decimal floor
        if (!Math.floor10) {
            Math.floor10 = function(value, exp) {
                return decimalAdjust('floor', value, exp);
            };
        }
        // Decimal ceil
        if (!Math.ceil10) {
            Math.ceil10 = function(value, exp) {
                return decimalAdjust('ceil', value, exp);
            };
        }

        //Decimal log
        if (!Math.log10) {
            Math.log10 = Math.log10 || function(x) {
                return Math.log(x) / Math.LN10;
            };
        }
    }

    angular.module('pattyApp.utils').service('DecimalAdjust', DecimalAdjust);
})();