Perché Firebug dice che toFixed () non è una funzione?


93

Sto usando jQuery 1.7.2 e jQuery UI 1.9.1. Sto usando il codice sottostante all'interno di un dispositivo di scorrimento. (http://jqueryui.com/slider/)

Ho una funzione che dovrebbe testare due valori e, a seconda della differenza tra i due valori, riformattarli (nella posizione decimale appropriata). Se la differenza è maggiore di 10, analizzerò il numero intero. Se la differenza è maggiore di 5, dovrebbe mantenere un decimale. Tutto il resto, terrò due decimali.

Quando inserisco due valori che hanno una differenza pari o inferiore a dieci, utilizzo la funzione toFixed (). E, in Firebug, vedo un errore:

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

C'è qualcosa di semplice che sto sbagliando?

Ecco il mio codice:

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);
}
}

Ho lo stesso problema. ma in locale il suo lavoro. quando è in diretta mostra un errore - TypeError: value.sell_price.toFixed non è una funzione
Mizanur Rahman

Risposte:


175

toFixednon è un metodo di tipi di variabili non numeriche. In altre parole, Lowe Highnon può essere risolto perché quando ottieni il valore di qualcosa in Javascript, viene automaticamente impostato su un tipo di stringa. L'uso parseFloat()(o parseInt()con una radice, se è un numero intero) ti consentirà di convertire diversi tipi di variabili in numeri che consentiranno alla toFixed()funzione di funzionare.

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

hai dimenticato le parentesi e le virgolette dopo il segno $, vero?
Ari Waisberg

1
@AriWais $SliderValFromè il nome della variabile utilizzato dall'OP, non una funzione
Jeremy

@ jeremy hai ragione, non ho prestato attenzione al post originale ... ho solo detto a quelli che vengono guardando direttamente alla soluzione il suo parseFloat ($ ('slide'). val ())
Ari Waisberg

91

Questo perché Lowè una stringa.

.toFixed() funziona solo con un numero.


Prova a fare:

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

Risolto il mio errore, grazie. Questo problema riscontrato nel browser Firefox.
ShivarajRH

26

Low è una stringa.

.toFixed() funziona solo con un numero.

Un modo semplice per superare questo problema è usare la coercizione del tipo :

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

La moltiplicazione per 1 forza il codice a convertire la stringa in numero e non cambia il valore. Codice JSFiddle qui .


1
Salva un carattere con (+ Low) .toFixed (..): P
Frank

2

Devi convertire in tipo di numero:

(+Low).toFixed(2)

0

In una funzione, usa come

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


},
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.