function customNumber()

in ui/src/app/common/filters/custom-number.filter.js [21:87]


function customNumber() {
    var TEN = 10;
    var MAX_VALUE = 1e300;
    var MIN_VALUE = 1e-300;
    // max symbols for decimal representation
    var MAX_SYMBOLS = 6;
    // max symbols for exponential representation
    var MAX_E_SYMBOLS = 0;

    // -2 symbols for digit and dot, -2 symbols for sign and 'e', -1 symbol for power
    var MAX_E_DECIMALS = 0;

    return function(value, emptyValue, maxSymbols) {
        // max symbols for decimal representation
        MAX_SYMBOLS = maxSymbols || 6;
        // max symbols for exponential representation
        MAX_E_SYMBOLS = MAX_SYMBOLS + 1;

        // -2 symbols for digit and dot, -2 symbols for sign and 'e', -1 symbol for power
        MAX_E_DECIMALS = MAX_E_SYMBOLS - 2 - 2 - 1;
        if (MAX_E_DECIMALS < 1) {
            MAX_E_DECIMALS = 1;
        }

        var sign = value < 0 ? '-' : '';
        var absValue = Math.abs(value);

        if (!value || absValue < MIN_VALUE) {
            if (angular.isDefined(emptyValue)) {
                return angular.isNumber(value) ? '0' : emptyValue;
            }
            if (value === 0) {
                return '0';
            }

            return '';
        }
        if (value > MAX_VALUE) {
            return 'Too Long';
        }

        return sign + numberToString(absValue);
    };

    /**
     * @param {Number} value number
     * @returns {String} string
     */
    function numberToString(value) {
        var pow = Math.log(value) / Math.log(TEN);

        if (pow < MAX_SYMBOLS && pow >= (2 - MAX_SYMBOLS)) {
            pow = (pow < 0) ? 0 : pow;
            var tenPow = Math.pow(TEN, MAX_SYMBOLS - Math.floor(pow) - 2);

            // normal case
            return tenPow > 1 ? (Math.round(value * tenPow) / tenPow).toString() : Math.round(value).toString();
        }
        if (pow >= MAX_SYMBOLS + 1) {
            // exp positive
            return value.toExponential(pow >= TEN ? MAX_E_DECIMALS - 1 : MAX_E_DECIMALS);
        }

        // exp negative
        return value.toExponential(pow <= -TEN + 1 ? MAX_E_DECIMALS - 1 : MAX_E_DECIMALS);
    }
}