Vnum = Number(arg); if(arg === null) Vnum = 0/0; if(len == "L") bytes = 12; var isf/*:boolean*/ = isFinite(Vnum); if(!isf) { /* Infinity or NaN */ if(Vnum < 0) O = "-"; else if(flags.indexOf("+") > -1) O = "+"; else if(flags.indexOf(" ") > -1) O = " "; O += (isnan(Vnum)) ? "nan" : "inf"; } else { var E/*:number*/ = 0; if(prec == -1 && isnum != 4) prec = 6; /* g/G conditional behavior */ if(isnum == 3) { O = Vnum.toExponential(1); E = +O.substr(O.indexOf("e") + 1); if(prec === 0) prec = 1; if(prec > E && E >= -4) { NUM(11); prec = prec -(E + 1); } else { NUM(12); prec = prec - 1; } } /* sign: workaround for negative zero */ var sg/*:string*/ = (Vnum < 0 || 1/Vnum == -Infinity) ? "-" : ""; if(Vnum < 0) Vnum = -Vnum; switch(isnum) { /* f/F standard */ case 1: case 11: if(Vnum < 1e21) { O = Vnum.toFixed(prec); if(isnum == 1) { if(prec===0 &&alt&& O.indexOf(".")==-1) O+="."; } else if(!alt) O=O.replace(/(\.\d*[1-9])0*$/,"$1").replace(/\.0*$/,""); else if(O.indexOf(".") == -1) O+= "."; break; } O = Vnum.toExponential(20); E = +O.substr(O.indexOf("e")+1); O = O.charAt(0) + O.substr(2,O.indexOf("e")-2); O = O + PADS(E - O.length + 1, "0"); if(alt || (prec > 0 && isnum !== 11)) O = O + "." + PADS(prec, "0"); break; /* e/E exponential */ case 2: case 12: O = Vnum.toExponential(prec); E = O.indexOf("e"); if(O.length - E === 3) O = O.substr(0, E+2) + "0" + O.substr(E+2); if(alt && O.indexOf(".") == -1) O = O.substr(0,E) +"."+ O.substr(E); else if(!alt && isnum == 12) O = O.replace(/\.0*e/, "e").replace(/\.(\d*[1-9])0*e/, ".$1e"); break; /* a/A hex */ case 4: if(Vnum===0){O= "0x0"+((alt||prec>0)?"."+PADS(prec,"0"):"")+"p+0"; break;} O = Vnum.toString(16); /* First char 0-9 */ var ac/*:number*/ = O.charCodeAt(0); if(ac == 48) { ac = 2; E = -4; Vnum *= 16; while(O.charCodeAt(ac++) == 48) { E -= 4; Vnum *= 16; } O = Vnum.toString(16); ac = O.charCodeAt(0); } var ai/*:number*/ = O.indexOf("."); if(O.indexOf("(") > -1) { /* IE exponential form */ var am/*:?Array*/ = O.match(/\(e(.*)\)/); var ae/*:number*/ = am ? (+am[1]) : 0; E += 4 * ae; Vnum /= Math.pow(16, ae); } else if(ai > 1) { E += 4 * (ai - 1); Vnum /= Math.pow(16, ai - 1); } else if(ai == -1) { E += 4 * (O.length - 1); Vnum /= Math.pow(16, O.length - 1); } /* at this point 1 <= Vnum < 16 */ #ifndef DO_NOT_NORMALIZE if(bytes > 8) { if(ac < 50) { E -= 3; Vnum *= 8; } else if(ac < 52) { E -= 2; Vnum *= 4; } else if(ac < 56) { E -= 1; Vnum *= 2; } /* at this point 8 <= Vnum < 16 */ } else { if(ac >= 56) { E += 3; Vnum /= 8; } else if(ac >= 52) { E += 2; Vnum /= 4; } else if(ac >= 50) { E += 1; Vnum /= 2; } /* at this point 1 <= Vnum < 2 */ } #endif O = Vnum.toString(16); if(O.length > 1) { if(O.length > prec+2 && O.charCodeAt(prec+2) >= 56) { var _f/*:boolean*/ = O.charCodeAt(0) == 102; O = (Vnum + 8 * Math.pow(16, -prec-1)).toString(16); if(_f && O.charCodeAt(0) == 49) E += 4; } if(prec > 0) { O = O.substr(0, prec + 2); if(O.length < prec + 2) { if(O.charCodeAt(0) < 48) O = O.charAt(0) + PADS((prec + 2 - O.length), "0") + O.substr(1); else O += PADS((prec + 2 - O.length), "0"); } } else if(prec === 0) O = O.charAt(0) + (alt ? "." : ""); } else if(prec > 0) O = O + "." + PADS(prec,"0"); else if(alt) O = O + "."; O = "0x" + O + "p" + (E>=0 ? "+" + E : E); break; } if(sg === "") { if(flags.indexOf("+") > -1) sg = "+"; else if(flags.indexOf(" ") > -1) sg = " "; } O = sg + O; } /* width */ if(width > O.length) { if(flags.indexOf("-") > -1) { O = O + PADS((width - O.length), " "); } else if(flags.indexOf("0") > -1 && O.length > 0 && isf) { pad = PADS((width - O.length), "0"); if(O.charCodeAt(0) < 48) { if(O.charAt(2).toLowerCase() == "x") O = O.substr(0,3) + pad + O.substring(3); else O = O.substr(0,1) + pad + O.substring(1); } else if(O.charAt(1).toLowerCase() == "x") O = O.substr(0,2) + pad + O.substring(2); else O = pad + O; } else { O = PADS((width - O.length), " ") + O; } } if(c < 96) O = O.toUpperCase();