Por que o Firebug diz que toFixed () não é uma função?

88

Estou usando o jQuery 1.7.2 e o jQuery UI 1.9.1. Estou usando o código abaixo em um controle deslizante. (http://jqueryui.com/slider/)

Eu tenho uma função que deveria testar dois valores e dependendo da diferença entre os dois valores reformatá-los (para a casa decimal apropriada). Se a diferença for maior que 10, analisarei o inteiro. Se a diferença for maior que 5, deve-se manter uma casa decimal. De resto, vou manter duas casas decimais.

Quando insiro dois valores com uma diferença de dez ou menos, uso a função toFixed (). E, no Firebug, vejo um erro:

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

Existe algo simples que estou fazendo de errado?

Aqui está o meu código:

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);
}
}
Evik James
fonte
Eu tenho o mesmo problema. mas em local seu trabalho. quando ao vivo mostra um erro - TypeError: value.sell_price.toFixed não é uma função
Mizanur Rahman

Respostas:

170

toFixednão é um método de tipos de variáveis ​​não numéricas. Em outras palavras, Lowe Highnão pode ser corrigido porque quando você obtém o valor de algo em Javascript, ele é automaticamente definido como um tipo de string. Usar parseFloat()(ou parseInt()com uma raiz, se for um inteiro) permitirá que você converta diferentes tipos de variáveis ​​em números, o que permitirá que a toFixed()função funcione.

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());
jeremy
fonte
você esqueceu o parêntese e as aspas após o sinal $, não foi?
Ari Waisberg
1
@AriWais $SliderValFromé o nome da variável usado pelo OP, não uma função
jeremy
@jeremy você tem razão, não prestei atenção ao post original ... Só falei para quem vem olhando direto para a solução seu parseFloat ($ ('slide'). val ())
Ari Waisberg
89

Isso porque Lowé uma string.

.toFixed() só funciona com um número.


Experimente fazer:

Low = parseFloat(Low).toFixed(..);
Naftali também conhecido como Neal
fonte
Corrigido meu erro, obrigado. Este problema enfrentado no navegador firefox.
ShivarajRH
26

Low é uma string.

.toFixed() só funciona com um número.

Uma maneira simples de superar esse problema é usar a coerção de tipo :

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

A multiplicação por 1 força o código a converter a string em número e não altera o valor. Código JSFiddle aqui .

João Pimentel Ferreira
fonte
1
Salve um caractere com (+ Low) .toFixado (..): P
Frank
2

Você precisa converter para o tipo de número:

(+Low).toFixed(2)
Idan
fonte
0

Em uma função, use como

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


},
Harry_pb
fonte