Dlaczego Firebug mówi, że toFixed () nie jest funkcją?


93

Używam jQuery 1.7.2 i jQuery UI 1.9.1. Używam poniższego kodu w suwaku. (http://jqueryui.com/slider/)

Mam funkcję, która powinna przetestować dwie wartości iw zależności od różnicy między nimi sformatować je (do odpowiedniego miejsca po przecinku). Jeśli różnica jest większa niż 10, przeanalizuję liczbę całkowitą. Jeśli różnica jest większa niż 5, należy zachować jedno miejsce po przecinku. W pozostałych przypadkach zachowam dwa miejsca po przecinku.

Kiedy wprowadzam dwie wartości, których różnica wynosi dziesięć lub mniej, używam funkcji toFixed (). A w Firebug widzę błąd:

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

Czy jest coś prostego, co robię źle?

Oto mój kod:

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

Mam ten sam problem. ale lokalnie to działa. na żywo pokazuje błąd - TypeError: value.sell_price.toFixed nie jest funkcją
Mizanur Rahman

Odpowiedzi:


175

toFixednie jest metodą nieliczbowych typów zmiennych. Innymi słowy, Lowi Highnie może być ustalona, ponieważ kiedy się wartość czegoś w JavaScript, automatycznie zostanie ustawiony na typ string. Użycie parseFloat()(lub parseInt()z podstawą, jeśli jest to liczba całkowita) pozwoli ci przekonwertować różne typy zmiennych na liczby, co umożliwi działanie toFixed()funkcji.

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

zapomniałeś nawiasów i cudzysłowów po znaku $, prawda?
Ari Waisberg

1
@AriWais $SliderValFromto nazwa zmiennej używana przez OP, a nie funkcja
jeremy

@jeremy masz rację, nie zwróciłem uwagi na oryginalny post ... Właśnie powiedziałem tym, którzy przyszli prosto do rozwiązania, jego parseFloat ($ ('slide'). val ())
Ari Waisberg

91

To dlatego, że Lowjest ciągiem.

.toFixed() działa tylko z liczbą.


Spróbuj:

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

Naprawiłem mój błąd, dzięki. Ten problem wystąpił w przeglądarce Firefox.
ShivarajRH

26

Low jest ciągiem.

.toFixed() działa tylko z liczbą.

Prostym sposobem na przezwyciężenie tego problemu jest użycie przymusu typu :

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

Mnożenie przez 1 wymusza na kodzie konwersję ciągu na liczbę i nie zmienia wartości. Kod JSFiddle tutaj .


1
Zapisz jeden znak za pomocą (+ Low) .toFixed (..): P
Frank,

2

Musisz przekonwertować na typ numeru:

(+Low).toFixed(2)

0

W funkcji użyj as

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


},
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.