Почему Firebug говорит, что toFixed () не является функцией?


Я использую jQuery 1.7.2 и jQuery UI 1.9.1. Я использую код ниже в ползунке. (http://jqueryui.com/slider/)

у меня есть функция, которая должна проверить два значения и в зависимости от разницы между двумя значениями их переформатировать (до соответствующего знака после запятой). Если разница больше 10, я буду разбирать целое число. Если разница больше 5, она должна содержать один десятичный знак. Ко всему прочему, я сохраню два десятичных знака.

когда Я ввожу два значения, которые имеют разницу в десять или меньше, я использую функцию toFixed (). И, в Firebug, я вижу ошибку:

TypeError: Low.toFixed is not a function
Low = Low.toFixed(2);

есть что-то простое, что я делаю не так?

вот мой код:

var Low = $SliderValFrom.val(),
High = $SliderValTo.val();

// THE NUMBER IS VALID
if (isNaN(Low) == false && isNaN(High) == false) {
    Diff = High - Low;
if (Diff > 10) {
      Low = parseInt(Low);  
  High = parseInt(High);    
} else if (Diff > 5) {
       Low = Low.toFixed(1);
       High = High.toFixed(1);
} else {
       Low = Low.toFixed(2);
   High = High.toFixed(2);
}
}
3 63

3 ответа:

toFixed не является методом нечисловых типов переменных. Другими словами,Low и High не может быть исправлено, потому что когда вы получаете значение чего-то в Javascript, он автоматически устанавливается в строковый тип. Используя parseFloat() (или parseInt() С основанием, если это целое число) позволит вам конвертировать различные типы переменных в числа, которые позволят toFixed() функция для работы.

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());

потому что Low - это строка.

.toFixed() работает только с номером.


попробуйте:

Low = parseFloat(Low).toFixed(..);

Low - это строка.

.toFixed() работает только с номером.

простой способ преодолеть такую проблему:

Low = (Low*1).toFixed(..);

умножение на 1 заставляет код преобразовать строку в число и не изменяет значение. JSFiddle код здесь.