Firebug neden toFixed () 'in bir işlev olmadığını söylüyor?


94

JQuery 1.7.2 ve jQuery UI 1.9.1 kullanıyorum. Aşağıdaki kodu bir kaydırıcı içinde kullanıyorum. (http://jqueryui.com/slider/)

İki değeri test etmesi gereken ve iki değer arasındaki farka bağlı olarak onları yeniden biçimlendiren (uygun ondalık basamağa) bir işlevim var. Fark 10'dan büyükse, tamsayıyı ayrıştıracağım. Fark 5'ten büyükse, bir ondalık tutmalıdır. Diğer her şeyde iki ondalık tutacağım.

Farkı on veya daha az olan iki değer girdiğimde, toFixed () işlevini kullanıyorum. Ve Firebug'da bir hata görüyorum:

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

Yanlış yaptığım basit bir şey mi var?

İşte kodum:

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

Benim de aynı problemim var. ama yerelde onun işi. canlı yayındayken bir hata gösterir - TypeError:
value.sell_price.toFixed

Yanıtlar:


177

toFixedsayısal olmayan değişken türleri yöntemi değildir. Başka bir deyişle, Lowve Highsen JavaScript şeyin değerini alınca, otomatik olarak bir dize türüne ayarlanmış olduğundan çözülemez. Kullanılması parseFloat()(veya parseInt()sağlayacak bir tamsayı ise bir radix ile) Eğer sağlayacak numaralara farklı değişken türleri dönüştürmek için toFixed()çalışmalara işlevi.

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

$ işaretinden sonraki parantezleri ve alıntıları unuttunuz, değil mi?
Ari Waisberg

1
@AriWais $SliderValFrom, bir işlev değil, OP tarafından kullanılan değişken adıdır
jeremy

@jeremy haklısın, orijinal gönderiye dikkat etmedim ... Sadece çözüm arayanlara doğrudan parseFloat ($ ['slide']. val ())
Ari Waisberg

91

Bunun nedeni Lowbir dizedir.

.toFixed() sadece bir sayı ile çalışır.


Yapmayı dene:

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

Hatamı düzelttim, teşekkürler. Firefox tarayıcısında bu sorunla karşılaşıldı.
ShivarajRH

26

Low bir dizedir.

.toFixed() sadece bir sayı ile çalışır.

Bu tür bir sorunun üstesinden gelmenin basit bir yolu, tür zorlamayı kullanmaktır :

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

1 ile çarpma, dizeyi sayıya dönüştürmek için koda zorlar ve değeri değiştirmez. JSFiddle kodu burada .


1
(+ Düşük) ile bir karakter kaydedin. Sabit (..): P
Frank

2

Sayı türüne dönüştürmeniz gerekir:

(+Low).toFixed(2)

0

Bir işlevde olarak kullanın

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


},
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.