求职应聘面试中的十二种高级错误 >>
<< Format double constraited by maximum fraction digits
Support the round() function on formating

Author Zhou Renjian Create@ 2005-01-27 17:55
whizz Note icon
// Support the round() function
function format(str, maxFDs, toRound5) {
    var round5 = false;
    if (toRound5 != null) {
        round5 = toRound5;
    }
    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);
                    if (round5) {
                        var x5 = dPart.substring(exp + maxFDs, exp + maxFDs + 1);
                        if (x5 != null && x5.length != 0 && parseInt(x5) >= 5) {
                            return plusOne(bPart + 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
                    if (round5) {
                        var x5 = dPart.substring(maxFDs - exp, maxFDs - exp + 1);
                        dPart = dPart.substring(0, maxFDs - exp);
                        if (x5 != null && x5.length != 0 && parseInt(x5) >= 5) {
                            return plusOne(sPart + "0." + zPart + bPart + dPart);
                        }
                    }
                    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) {
                if (round5) {
                    var x5 = dPart.substring(maxFDs, maxFDs + 1);
                    if (x5 != null && x5.length != 0 && parseInt(x5) >= 5) {
                        dPart = dPart.substring(0, maxFDs);
                        if (maxFDs != 0) {
                            return plusOne(bPart + "." + dPart);
                        } else {
                            return plusOne(bPart);
                        }
                    }
                }
                dPart = dPart.substring(0, maxFDs);
                if (maxFDs != 0) {
                    return bPart + "." + dPart;
                } else {
                    return bPart;
                }
            } else {
                return str;
            }
        }
    }
}

function plusOne(s) {
    var r = "";
    var sign = "";
    if (s.indexOf("+") == 0 || s.indexOf("-") == 0) {
        sign = s.substring(0, 1);
        s = s.substring(1);
    }
    for (var i = s.length - 1; i >= 0; i--) {
        var c = s.charAt(i);
        if (c >= '0' && c <= '9') {
            var n = parseInt("" + c);
            if (n + 1 < 10) {
                r = "" + s.substring(0, i) + (n + 1) + r;
                return "" + sign + r;
            } else {
                r = "0" + r;
            }
        } else {
            r = "" + c + r;
        }
    }
    return "" + sign + "1" + r;
}

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