¿Por qué Firebug dice que toFixed () no es una función?

93

Estoy usando jQuery 1.7.2 y jQuery UI 1.9.1. Estoy usando el siguiente código dentro de un control deslizante. (http://jqueryui.com/slider/)

Tengo una función que debería probar dos valores y, dependiendo de la diferencia entre los dos valores, reformatearlos (al lugar decimal apropiado). Si la diferencia es mayor que 10, analizaré el número entero. Si la diferencia es mayor que 5, debe mantener un decimal. Todo lo demás, me quedaré con dos decimales.

Cuando ingreso dos valores que tienen una diferencia de diez o menos, uso la función toFixed (). Y, en Firebug, veo un error:

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

¿Hay algo simple que esté haciendo mal?

Aquí está mi 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
fuente
Yo tengo el mismo problema. pero en local su trabajo. cuando en vivo muestra un error - TypeError: value.sell_price.toFixed no es una función
Mizanur Rahman

Respuestas:

175

toFixedno es un método de tipos de variables no numéricas. En otras palabras, Lowy Highno se puede arreglar porque cuando obtienes el valor de algo en Javascript, automáticamente se establece en un tipo de cadena. Usar parseFloat()(o parseInt()con una base, si es un número entero) le permitirá convertir diferentes tipos de variables en números que permitirán que la toFixed()función funcione.

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());
Jeremy
fuente
olvidó los paréntesis y las comillas después del signo $, ¿no es así?
Ari Waisberg
1
@AriWais $SliderValFromes el nombre de variable utilizado por el OP, no una función
jeremy
@jeremy, tienes razón, no presté atención a la publicación original ... Solo les dije a aquellos que ven directamente a la solución su parseFloat ($ ('slide'). val ())
Ari Waisberg
91

Eso es porque Lowes una cuerda.

.toFixed() solo funciona con un número.


Trata de hacerlo:

Low = parseFloat(Low).toFixed(..);
Naftali alias Neal
fuente
Arreglado mi error, gracias. Este problema enfrentado en el navegador Firefox.
ShivarajRH
26

Low es una cuerda.

.toFixed() solo funciona con un número.

Una forma sencilla de superar este problema es utilizar la coerción de tipos :

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

La multiplicación por 1 obliga al código a convertir la cadena en un número y no cambia el valor. Código JSFiddle aquí .

João Pimentel Ferreira
fuente
1
Guarde un carácter con (+ Low) .toFixed (..): P
Frank
2

Necesita convertir al tipo de número:

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

En una función, use como

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


},
Harry_pb
fuente