Pourquoi Firebug dit-il que toFixed () n'est pas une fonction?

94

J'utilise jQuery 1.7.2 et jQuery UI 1.9.1. J'utilise le code ci-dessous dans un curseur. (http://jqueryui.com/slider/)

J'ai une fonction qui devrait tester deux valeurs et en fonction de la différence entre les deux valeurs les reformater (à la décimale appropriée). Si la différence est supérieure à 10, je vais analyser l'entier. Si la différence est supérieure à 5, elle doit conserver une décimale. Tout le reste, je garderai deux décimales.

Lorsque j'entre deux valeurs qui ont une différence de dix ou moins, j'utilise la fonction toFixed (). Et, dans Firebug, je vois une erreur:

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

Y a-t-il quelque chose de simple que je fais mal?

Voici mon 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
la source
J'ai le même problème. mais en local son travail. en direct, il affiche une erreur - TypeError: value.sell_price.toFixed n'est pas une fonction
Mizanur Rahman

Réponses:

177

toFixedn'est pas une méthode de types de variables non numériques. En d'autres termes, Lowet Highne peut pas être corrigé car lorsque vous obtenez la valeur de quelque chose en Javascript, il est automatiquement défini sur un type de chaîne. Utiliser parseFloat()(ou parseInt()avec une base, s'il s'agit d'un entier) vous permettra de convertir différents types de variables en nombres, ce qui permettra à la toFixed()fonction de fonctionner.

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());
Jeremy
la source
vous avez oublié la parenthèse et les guillemets après le signe $, n'est-ce pas?
Ari Waisberg
1
@AriWais $SliderValFromest le nom de variable utilisé par l'OP, pas une fonction
jeremy
@jeremy vous avez raison, je n'ai pas fait attention au post original ... Je viens de dire à ceux qui viennent chercher directement la solution son parseFloat ($ ('slide'). val ())
Ari Waisberg
91

C'est parce que Lowc'est une chaîne.

.toFixed() ne fonctionne qu'avec un nombre.


Essayez de faire:

Low = parseFloat(Low).toFixed(..);
Naftali alias Neal
la source
Correction de mon erreur, merci. Ce problème rencontré dans le navigateur Firefox.
ShivarajRH
26

Low est une chaîne.

.toFixed() ne fonctionne qu'avec un nombre.

Un moyen simple de surmonter ce problème consiste à utiliser la coercition de type :

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

La multiplication par 1 oblige à coder pour convertir la chaîne en nombre et ne change pas la valeur. Code JSFiddle ici .

João Pimentel Ferreira
la source
1
Enregistrez un caractère avec (+ Bas) .toFixed (..): P
Frank
2

Vous devez convertir en type de nombre:

(+Low).toFixed(2)
Idan
la source
0

Dans une fonction, utilisez comme

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


},
Harry_pb
la source