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

93

Я использую 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);
}
}
Эвик Джеймс
источник
У меня такая же проблема. но в локальных его работа. когда в прямом эфире отображается ошибка - TypeError: value.sell_price.toFixed не является функцией
Мизанур Рахман

Ответы:

175

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

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());
Джереми
источник
вы забыли скобки и кавычки после знака $, не так ли?
Ари Вайсберг,
1
@AriWais $SliderValFrom- это имя переменной, используемое OP, а не функция
Джереми 01
@jeremy, вы правы, я не обратил внимания на исходный пост ... Я просто сказал тем, кто приходит прямо к решению, его parseFloat ($ ('slide'). val ())
Ари Вайсберг,
91

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

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


Попробуйте сделать:

Low = parseFloat(Low).toFixed(..);
Нафтали он же Нил
источник
Исправлена ​​моя ошибка, спасибо. Эта проблема возникла в браузере Firefox.
ShivarajRH
26

Low это строка.

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

Простой способ решить эту проблему - использовать приведение типов :

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

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

Жоао Пиментел Феррейра
источник
1
Сохраните одного персонажа с помощью (+ Low) .toFixed (..): P
Фрэнк
2

Вам нужно преобразовать в тип числа:

(+Low).toFixed(2)
Идан
источник
0

В функции используйте как

render: function (args) {
    if (args.value != 0)
        return (parseFloat(args.value).toFixed(2));


},
Harry_pb
источник