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

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

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(..);

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í .


1
Guarde un carácter con (+ Low) .toFixed (..): P
Frank

2

Necesita convertir al tipo de número:

(+Low).toFixed(2)

0

En una función, use como

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


},
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.