По умолчанию реализация javascript "Number.toFixed" выглядит немного сломанной.
console.log((8.555).toFixed(2));    // returns 8.56
console.log((8.565).toFixed(2));    // returns 8.57
console.log((8.575).toFixed(2));    // returns 8.57
console.log((8.585).toFixed(2));    // returns 8.59
Мне нужен метод округления, который более последователен.
В диапазоне от 8.500 до 8.660 следующие номера не округляются правильно.
8.575
8.635
8.645
8.655
Я попытался исправить реализацию прототипа следующим образом, но это только на полпути. Может ли кто-нибудь предложить какие-либо изменения, которые заставили бы его работать более последовательно?
Number.prototype.toFixed = function(decimalPlaces) {
    var factor = Math.pow(10, decimalPlaces || 0);
    var v = (Math.round(this * factor) / factor).toString();
    if (v.indexOf('.') >= 0) {
        return v + factor.toString().substr(v.length - v.indexOf('.'));
    }
    return v + '.' + factor.toString().substr(1);
};
