Warum sagt Firebug, dass toFixed () keine Funktion ist?

86

Ich verwende jQuery 1.7.2 und jQuery UI 1.9.1. Ich verwende den folgenden Code in einem Schieberegler. (http://jqueryui.com/slider/)

Ich habe eine Funktion, die zwei Werte testen und abhängig von der Differenz zwischen den beiden Werten neu formatieren soll (auf die entsprechende Dezimalstelle). Wenn die Differenz größer als 10 ist, werde ich die ganze Zahl analysieren. Wenn die Differenz größer als 5 ist, sollte eine Dezimalstelle beibehalten werden. Alles andere werde ich zwei Dezimalstellen behalten.

Wenn ich zwei Werte mit einem Unterschied von zehn oder weniger eingebe, verwende ich die Funktion toFixed (). Und in Firebug sehe ich einen Fehler:

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

Gibt es etwas Einfaches, das ich falsch mache?

Hier ist mein Code:

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
quelle
Ich habe das gleiche Problem. aber vor Ort seine Arbeit. Wenn es live ist, wird ein Fehler angezeigt - TypeError: value.sell_price.toFixed ist keine Funktion
Mizanur Rahman

Antworten:

166

toFixedist keine Methode für nicht numerische Variablentypen. Mit anderen Worten, Lowund Highkann nicht behoben werden, da beim automatischen Abrufen des Werts von etwas in Javascript automatisch ein Zeichenfolgentyp festgelegt wird. Wenn Sie parseFloat()(oder parseInt()mit einem Radix, wenn es sich um eine Ganzzahl handelt) verwenden, können Sie verschiedene Variablentypen in Zahlen konvertieren, damit die toFixed()Funktion funktioniert.

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());
Jeremy
quelle
Sie haben die Klammern und Anführungszeichen nach dem $ -Zeichen vergessen, nicht wahr?
Ari Waisberg
1
@AriWais $SliderValFromist der Variablenname, der vom OP verwendet wird, keine Funktion
Jeremy
@jeremy du hast recht, ich habe nicht auf den ursprünglichen Beitrag geachtet ... Ich habe nur zu denen gesagt, die direkt nach der Lösung suchen: parseFloat ($ ('slide'). val ())
Ari Waisberg
85

Das liegt daran, dass Lowes sich um eine Zeichenfolge handelt.

.toFixed() funktioniert nur mit einer Nummer.


Versuchen Sie Folgendes:

Low = parseFloat(Low).toFixed(..);
Naftali alias Neal
quelle
Mein Fehler wurde behoben, danke. Dieses Problem trat im Firefox-Browser auf.
ShivarajRH
25

Low ist eine Zeichenfolge.

.toFixed() funktioniert nur mit einer Nummer.

Ein einfacher Weg, um ein solches Problem zu überwinden, ist die Verwendung von Typenzwang :

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

Die Multiplikation mit 1 erzwingt Code, um die Zeichenfolge in eine Zahl umzuwandeln, und ändert den Wert nicht. JSFiddle-Code hier .

João Pimentel Ferreira
quelle
1
Speichern Sie ein Zeichen mit (+ Low) .toFixed (..): P
Frank
2

Sie müssen in den Zahlentyp konvertieren:

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

Verwenden Sie in einer Funktion als

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


},
Harry_pb
quelle