Support the round() function on formating
Author
Zhou Renjian
Create@
2005-01-27 17:55
// 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;
}