Как записать прототип для Number.toFixed в JavaScript?

Если вы хотите, чтобы в ваших строках был литерал \, вы должны написать его как \\.

Символ \ запускает escape-последовательность, и ни #, ни : не являются действительными в качестве второго символа. Он предназначен для таких вещей, как новая строка \n или таб \t.

Конечно, если вы не хотите, чтобы в результирующей строке было \, просто удалите его полностью.

5
задан Ken 3 December 2008 в 13:33
поделиться

5 ответов

Попробуйте это:

if (!Number.prototype.toFixed)

    Number.prototype.toFixed = function(precision) {
        var power = Math.pow(10, precision || 0);
        return String(Math.round(this * power)/power);
    }
15
ответ дан 18 December 2019 в 12:02
поделиться

Я думаю, что Firefox 1.5 и IE 5 в значительной степени больше не используются, или очень незначительным количеством людей.
Это немного похоже на кодирование для поддержки Netscape Navigator... :-)
Если некоторый другой главный браузер (Opera? Safari? вряд ли...), не поддерживает это, или если Ваши блоги показывают партию использования браузера прежней версии, можно, вероятно, просто использовать эти методы.
Когда-то, мы должны идти дальше. ^_^

[РЕДАКТИРОВАНИЕ] Хорошо работает на Opera 9.50 и Safari 3.1

javascript: var num = 3.1415926535897932384; alert(num.toFixed(7));

Статья, на которую Вы ссылаетесь, является годом и половину назад, вечность в отрасли ИТ... Я думаю, что, в отличие от пользователей IE, пользователи Firefox часто переходят к последней версии.

0
ответ дан 18 December 2019 в 12:02
поделиться

С веб-сайта Байтов эта функция является почти тем же, чем llinsky's Serge:

if (!num.toFixed) 
{
  Number.prototype.toFixed = function(precision) 
  {
     var num = (Math.round(this*Math.pow(10,precision))).toString();
     return num.substring(0,num.length-precision) + "." + 
            num.substring(num.length-precision, num.length);
  }
}
0
ответ дан 18 December 2019 в 12:02
поделиться

Другая опция (который не преобразовывает в строку излишне и также исправляет просчет (162,295) .toFixed (2) к 162,29 (должен быть 162.30)).

Number.prototype._toFixed=Number.prototype.toFixed; //Preserves the current function
Number.prototype.toFixed=function(precision){
/* step 1 */ var a=this, pre=Math.pow(10,precision||0);
/* step 2 */ a*=pre; //currently number is 162295.499999
/* step 3 */ a = a._toFixed(2); //sets 2 more digits of precision creating 16230.00
/* step 4 */ a = Math.round(a);
/* step 5 */ a/=pre;
/* step 6 */ return a._toFixed(precision);
}
/*This last step corrects the number of digits from 162.3 ( which is what we get in
step 5 to the corrected 162.30. Without it we would get 162.3 */

Править: После попытки этого определенного воплощения, this*=Math.pow(10, precision||0) создает ошибку недопустимое левое присвоение. Так дал этому ключевому слову переменную a. Также помогло бы, закрыл ли я свои функции ^_^;;

0
ответ дан 18 December 2019 в 12:02
поделиться

Попробуйте следующее:

 Number.prototype.toFixed = function(precision) {
     var power = Math.pow(10, precision || 0);
     return String(Math.round(this * power)/power);
 }
0
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: