Вопрос по использованию функции toFixed () в javascript - PullRequest
1 голос
/ 14 марта 2011

Я искал функцию JavaScript для округления числа до указанного количества знаков после запятой, и я нашел эту страницу: http://www.kadimi.com/en/round-float-349

На этой странице есть раздел, в котором используется прототипирование и функция toFixed ()..... однако я также нашел эту страницу: http://freewebdesigntutorials.com/javaScriptTutorials/jsNumberObject/toFixedMethod.htm (см. последний пример), и здесь используется функция toFixed, и, похоже, она делает то же самое.

Я небольшой человек javascript, поэтому извиняюсь, если это глупый вопрос, но в чем разница между ними?

Вот они для ясности ..

С прототипом:

if (!Number.toFixed) {
  Number.prototype.toFixed=function(n){
    return Math.round(this*Math.pow(10, n)) / Math.pow(10, n);
  }
}

// example:
floating_number = 123.45687;
decimal_points = 2;
window.alert(floating_number.toFixed(decimal_points));

Стандарт:

var numex = 3.1415926535;
alert( numex.toFixed(5) );

Я также опробовал эту первую партию кода с этой функцией ..

function round_float(number,places){
    if (!number.toFixed) {
        number.prototype.toFixed=function(places){
            return Math.round(this*Math.pow(10, places)) / Math.pow(10, places);
        }
    } else {
        alert('bad');
    }
}

Она попала в раздел «плохих» предупреждений ..... I 'я предполагаю, что это было вызвано ложным ответом toFixed;Есть идеи, почему эта функция так написана?

Ответы [ 4 ]

4 голосов
/ 14 марта 2011

Simple.Не во всех браузерах есть toFixed, поэтому в первом примере это обеспечивает безопасность.Альтернатива означает, что браузер имеет toFixed, что не «плохо», а «нормально».

1 голос
/ 14 марта 2011

Я не уверен, почему у вас есть alert('bad') в вашем блоке else;все, что действительно происходит в «плохом» случае, это то, что переменная number уже имеет член с именем toFixed, определенный (который оценивается как true при приведении к логическому значению - всегда так для функции).1005 * Это не обязательно плохо, так как вы хотите, чтобы конечный результат был ?!Код, кажется, определяет версию, если toFixed, если уже не является нативной * реализацией.Предупреждение срабатывает, когда поддерживает native *.

* (Ну, либо встроенный в браузер, либо уже добавленный в прототип библиотекой JS. В любом случае, он уже есть, поэтому больше не нужно работать.)

0 голосов
/ 18 декабря 2015

Я использую функцию для функций javascript toFixed (). В моем проекте QA проверено на цену за единицу Например, это будет 79,9999, поэтому, если я использовал toFixed (2), результат будет 80,00. В моем QA не хочет, чтобы с 80.00 фиксировали, хотят 79.99

Некоторые случаи: До после исправления (2) 78,896 78,89 78.996 78.99

Так что я использовал свою функцию так:

function customtoFixed(num){
  if(num % 1 != 0){
   var split_nums = (''+num).match(/(\d+)(\.\d+)?/);
   console.log(split_nums);
      if(split_nums[2]>.995){
             return (+split_nums[1]) + (+0.99);
      } else {
      return num.toFixed(2); 
      }
   } else {
    return num.toFixed(2); 
   }
}
0 голосов
/ 14 марта 2011

Я бы попробовал что-то вроде этого:

if (!Number.toFixed){
    Number.prototype.toFixed = function(n){
        return Math.round(this * Math.pow(10, n)) / Math.pow(10, n);
    }
}

var num = 123.4567;
$('body').append(num.toFixed(3));

Выполните «проверку существования», прежде чем она понадобится, а не в функции. ( Подтверждено на работу )

...