Mengapa Firebug mengatakan toFixed () bukan sebuah fungsi?

94

Saya menggunakan jQuery 1.7.2 dan jQuery UI 1.9.1. Saya menggunakan kode di bawah ini dalam slider. (http://jqueryui.com/slider/)

Saya memiliki fungsi yang harus menguji dua nilai dan tergantung pada perbedaan antara dua nilai memformatnya (ke tempat desimal yang sesuai). Jika perbedaannya lebih besar dari 10, saya akan mengurai bilangan bulat. Jika perbedaannya lebih besar dari 5, itu harus menyimpan satu desimal. Yang lainnya, saya akan menyimpan dua desimal.

Ketika saya memasukkan dua nilai yang memiliki perbedaan yaitu sepuluh atau kurang, saya menggunakan fungsi toFixed (). Dan, di Firebug, saya melihat kesalahan:

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

Apakah ada sesuatu yang sederhana yang saya lakukan salah?

Ini kode saya:

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
sumber
Saya memiliki masalah yang sama. tetapi dalam pekerjaan lokal. ketika di hidup itu menunjukkan kesalahan - TypeError: value.sell_price.toFixed bukan fungsi
Mizanur Rahman

Jawaban:

177

toFixedbukan metode jenis variabel non-numerik. Dengan kata lain, Lowdan Hightidak bisa diperbaiki karena ketika Anda mendapatkan nilai dari sesuatu di Javascript, secara otomatis diatur ke tipe string. Menggunakan parseFloat()(atau parseInt()dengan radix, jika itu bilangan bulat) akan memungkinkan Anda untuk mengonversi jenis variabel yang berbeda menjadi angka yang akan memungkinkan toFixed()fungsi untuk bekerja.

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());
jeremy
sumber
Anda lupa tanda kurung dan tanda kutip setelah tanda $, bukan?
Ari Waisberg
1
@AriWais $SliderValFromadalah nama variabel yang digunakan oleh OP, bukan fungsi
jeremy
@jeremy Anda benar, saya tidak memperhatikan posting asli ... Saya hanya mengatakan kepada mereka yang datang melihat langsung ke solusi parseFloat ($ ('slide']. val ())
Ari Waisberg
91

Itu karena Lowadalah sebuah string.

.toFixed() hanya bekerja dengan angka.


Coba lakukan:

Low = parseFloat(Low).toFixed(..);
Naftali alias Neal
sumber
Memperbaiki kesalahan saya, Terima kasih. Masalah ini dihadapi di browser firefox.
ShivarajRH
26

Low adalah sebuah string.

.toFixed() hanya bekerja dengan angka.

Cara sederhana untuk mengatasi masalah tersebut adalah dengan menggunakan paksaan tipe :

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

Perkalian dengan 1 memaksa kode untuk mengubah string menjadi angka dan tidak mengubah nilainya. Kode JSFiddle di sini .

João Pimentel Ferreira
sumber
1
Simpan satu karakter dengan (+ Low] .toFixed (..): P
Frank
2

Anda perlu mengonversi ke jenis nomor:

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

Dalam suatu fungsi, gunakan sebagai

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


},
Harry_pb
sumber