All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.bower_components.globalize.src.number.format.significant-digits.js Maven / Gradle / Ivy

There is a newer version: 1.2.2.1-jre17
Show newest version
define([
    "../../common/create-error/unsupported-feature",
    "../../util/number/to-precision",
    "../../util/string/pad"
], function (createErrorUnsupportedFeature, numberToPrecision, stringPad) {

    /**
     * toPrecision( number, minimumSignificantDigits, maximumSignificantDigits, round )
     *
     * @number [Number]
     *
     * @minimumSignificantDigits [Number]
     *
     * @maximumSignificantDigits [Number]
     *
     * @round [Function]
     *
     * Return the formatted significant digits number.
     */
    return function (number, minimumSignificantDigits, maximumSignificantDigits, round) {
        var atMinimum, atMaximum;

        // Sanity check.
        if (minimumSignificantDigits > maximumSignificantDigits) {
            maximumSignificantDigits = minimumSignificantDigits;
        }

        atMinimum = numberToPrecision(number, minimumSignificantDigits, round);
        atMaximum = numberToPrecision(number, maximumSignificantDigits, round);

        // Use atMaximum only if it has more significant digits than atMinimum.
        number = +atMinimum === +atMaximum ? atMinimum : atMaximum;

        // Expand integer numbers, eg. 123e5 to 12300.
        number = (+number).toString(10);

        if ((/e/).test(number)) {
            throw createErrorUnsupportedFeature({
                feature: "integers out of (1e21, 1e-7)"
            });
        }

        // Add trailing zeros if necessary.
        if (minimumSignificantDigits - number.replace(/^0+|\./g, "").length > 0) {
            number = number.split(".");
            number[1] = stringPad(number[1] || "", minimumSignificantDigits - number[0].replace(/^0+/, "").length, true);
            number = number.join(".");
        }

        return number;
    };

});




© 2015 - 2024 Weber Informatics LLC | Privacy Policy