Дзен-трансгуманист, чего-то я не особо вдупляю - накой такие сложности в твоей функции?
(function(a){
window.alert = function(){
a(Array.prototype.slice.call(arguments).join('\n'))
}
}(window.alert))
function maxFraction (value, digits) {
var fixed = (+value).toFixed(digits);
var i = fixed.length - 1;
loop: while (true) {
switch (fixed.charAt(i)) {
case "0": i--; continue;
case ".": i--; break loop;
}
break;
}
return fixed.slice(0, i+1);
}
Number.prototype.round = function(p){ //почему не так?
return +this.toFixed(p)
}
num = 0.1 + 0.2;
alert(
num,
maxFraction(num, 1),
num.round(1),
maxFraction(num+99, 1),
(num+99).round(1),
maxFraction(num, 0),
num.round(),
maxFraction(num, 5),
num.round(5)
)