Support the round() function on formating >>
<< 7秒钟记录
Format double constraited by maximum fraction digits

Author Zhou Renjian Create@ 2005-01-27 17:02
whizz Note icon
// Do not round the double number.
function format(str, maxFDs) {
    var eIndex = str.indexOf("e");
    if (eIndex != -1) {
        // *.*e*
        var exp = parseInt(str.substring(eIndex + 1));
        var dIndex = str.indexOf(".");
        if (dIndex == -1) {
            dIndex = eIndex;
        }
        var bPart = str.substring(0, dIndex);
        var dPart = str.substring(dIndex + 1, eIndex);
        if (exp > 0) {
            // *.*e+*
            if (dPart.length <= exp) {
                // 1.023e+10
                var zPart = "";
                for (var i = 0; i < exp - dPart.length; i++) {
                    zPart += "0";
                }
                //alert(bPart + ":" + dPart + ":" + zPart);
                return "" + bPart + dPart + zPart;
            } else {
                // 1.01234567e+5
                if (dPart.length - exp > maxFDs) {
                    // maxFDs = 2
                    // *.0123456789e+5
                    var xPart = dPart.substring(0, exp) + "." + dPart.substring(exp, exp + maxFDs);
                    //alert(bPart + ":" + dPart + ":" + xPart);
                    return bPart + xPart;
                } else {
                    // maxFDs = 2
                    // *.012345e+5
                    var xPart = dPart.substring(0, exp) + "." + dPart.substring(exp);
                    return bPart + xPart;
                }
            }
        } else { // exp <= 0
            exp = -exp;
            var sPart = "";
            if (str.indexOf("+") == 0 || str.indexOf("-") == 0) {
                sPart = str.substring(0, 1);
                bPart = bPart.substring(1, eIndex);
            }
            str = str.replace(/\./, "");
            if (exp > maxFDs) {
                //1.02342e-10 with maxFDs = 3
                return "0";
            } else {
                //1.02342e-3 with maxFDs = 5
                var zPart = "";
                for (var i = 0; i < exp - 1; i++) {
                    zPart += "0";
                }
                if (dPart.length + exp > maxFDs) {
                    //1.02342e-3 with maxFDs = 5
                    dPart = dPart.substring(0, maxFDs - exp);
                    //alert(sPart + ":" + "0." + ":" + zPart + ":" + bPart + ":" + dPart)
                    return sPart + "0." + zPart + bPart + dPart;
                } else {
                    //1.02e-3 with maxFDs = 5
                    return sPart + "0." + zPart + bPart + dPart;
                }
            }
        }
    } else {
        var dIndex = str.indexOf(".");
        if (dIndex == -1) {
            return str;
        } else {
            var bPart = str.substring(0, dIndex);
            var dPart = str.substring(dIndex + 1);
            if (dPart.length > maxFDs) {
                dPart = dPart.substring(0, maxFDs);
                if (maxFDs != 0) {
                    return bPart + "." + dPart;
                } else {
                    return bPart;
                }
            } else {
                return str;
            }
        }
    }
}

// passed
alert(format("1.023e+10") == "10230000000");
alert(format("1.0123456789e+5", 2) == "101234.56");
alert(format("1.012345e+5", 2) == "101234.5");
alert(format("1.02342e-10", 2) == "0");
alert(format("1.02342e-3", 5) == "0.00102");
alert(format("1.02e-3", 5) == "0.00102");
alert(format("1.023423", 5) == "1.02342");
alert(format("1.023", 5) == "1.023");
alert(format("231.023", 1) == "231.0");
alert(format("231.023", 0) == "231");

本记录所在类别:
本记录相关记录: