Saya ingin memformat nomor saya untuk selalu menampilkan 2 tempat desimal, pembulatan jika berlaku.
Contoh:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
Saya telah menggunakan ini:
parseFloat(num).toFixed(2);
Tapi itu ditampilkan 1
sebagai 1
, bukan 1.00
.
Jawaban:
Demo Langsung
Tampilkan cuplikan kode
Perhatikan bahwa itu akan membulatkan ke 2 tempat desimal, sehingga input
1.346
akan kembali1.35
.sumber
1
ditampilkan sebagai1.00
, dan1.341
ditampilkan sebagai1.34
.(+num).toFixed(2)
. Bahkan mempertahankan bug pembulatan dalam aslinya, lihat jawaban Nate .Tampilkan cuplikan kode
sumber
1.34
ekspresiNumber(1.345).toFixed(2)
.1.345
adalah contoh angka yang tidak dapat disimpan tepat di titik mengambang, jadi saya pikir alasannya tidak bulat seperti yang Anda harapkan, adalah bahwa itu sebenarnya disimpan sebagai angka sedikit kurang dari 1,345 dan dibulatkan ke bawah. Jika Anda menguji dengan dengan(1.34500001).toFixed(2)
maka Anda melihatnya dengan benar membulatkan ke1.35
Jawaban ini akan gagal jika
value = 1.005
.Sebagai solusi yang lebih baik, masalah pembulatan dapat dihindari dengan menggunakan angka yang diwakili dalam notasi eksponensial:
Kode bersih seperti yang disarankan oleh @Kon, dan penulis asli:
Anda dapat menambahkan
toFixed()
di akhir untuk mempertahankan titik desimal misalnya:1.00
tetapi perhatikan bahwa itu akan kembali sebagai string.Kredit: Pembulatan Desimal dalam JavaScript
sumber
toFixed
memiliki masalah pembulatan itu. Jawaban Anda harus yang diterima.Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
sumber
toPrecision
hanya memformat angka ke sejumlah tempat desimal tertentu, hanya meninggalkan tempat yang berlebihan, tetapi tidak membulatkannya . Tentu saja ini bisa sangat berguna, tetapi penting untuk memahami perbedaannya.(20.55).toPrecision(3) "20.6"
toFixed
:const formattedVal = Number(val.toFixed(2));
Jangan gunakantoPrecision
, karena menghitung angka non-desimal saat menggunakan parameter presisi.Untuk pembulatan paling akurat, buat fungsi ini:
dan menggunakannya untuk membulatkan ke 2 tempat desimal:
Berkat Razu , artikel ini , dan referensi Math.round MDN .
sumber
Untuk browser modern, gunakan
toLocaleString
:Tentukan tag lokal sebagai parameter pertama untuk mengontrol pemisah desimal . Untuk titik, gunakan misalnya lokal Bahasa Inggris AS:
pemberian yang mana:
Sebagian besar negara di Eropa menggunakan koma sebagai pemisah desimal, jadi jika Anda misalnya menggunakan lokal Swedia / Swedia:
itu akan memberi:
sumber
Jawaban paling sederhana:
Contoh: http://jsfiddle.net/E2XU7/
sumber
toFixed
sudah disarankan di stackoverflow.com/a/13292833/218196 . Informasi tambahan apa yang diberikan pertanyaan Anda?toFixed
nomor.Solusi yang jauh lebih umum untuk pembulatan ke tempat N
sumber
roundN(-3.4028230607370965e+38,2)
mengembalikan"-3.4028230607370965e+38"
bukannya yang diharapkan 0,00https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
sumber
Jika Anda sudah menggunakan jQuery, Anda bisa melihat menggunakan plugin Format Angka jQuery .
Plugin dapat mengembalikan angka yang diformat sebagai string, Anda dapat mengatur desimal, dan ribuan pemisah, dan Anda dapat memilih jumlah desimal untuk ditampilkan.
Anda juga bisa mendapatkan Format Angka jQuery dari GitHub .
sumber
Apakah ini yang Anda maksud?
sumber
Ubah angka menjadi string, dengan hanya menyimpan dua desimal:
Hasil dari n adalah:
sumber
Apakah Anda mencari lantai?
sumber
sumber
Berikut ini juga fungsi generik yang dapat memformat ke sejumlah tempat desimal:
sumber
Di mana pemformatan khusus diperlukan, Anda harus menulis rutinitas Anda sendiri atau menggunakan fungsi pustaka yang melakukan apa yang Anda butuhkan. Fungsi ECMAScript dasar biasanya tidak cukup untuk menampilkan angka yang diformat.
Penjelasan menyeluruh tentang pembulatan dan pemformatan ada di sini: http://www.merlyn.demon.co.uk/js-round.htm#RiJSebagai aturan umum, pembulatan dan pemformatan seharusnya hanya ditampilkan sebagai langkah terakhir sebelum output. Melakukannya lebih awal dapat menyebabkan kesalahan besar yang tidak terduga dan menghancurkan pemformatan.
sumber
sumber
Jalankan saja ke salah satu utas terlama ini, di bawah ini adalah solusi saya:
Beritahu saya jika ada yang bisa membuat lubang
sumber
Tampilkan cuplikan kode
sumber
parseFloat(num.toFixed(2))
Anda tidak memberi kami seluruh gambaran.
javascript:alert(parseFloat(1).toFixed(2))
menunjukkan 1,00 di browser saya ketika saya tempelkan di bilah lokasi. Namun jika Anda melakukan sesuatu setelahnya, itu akan kembali.sumber
sumber
Saya harus memutuskan antara konversi parseFloat () dan Number () sebelum saya dapat melakukan panggilan toFixed (). Berikut adalah contoh dari pemformatan input pengguna pasca-pengambilan.
HTML:
Penangan acara:
Kode di atas akan menghasilkan pengecualian TypeError. Perhatikan bahwa meskipun tipe input html adalah "angka", input pengguna sebenarnya adalah tipe data "string". Namun, fungsi toFixed () hanya dapat dipanggil pada objek yang merupakan Angka.
Kode akhir saya akan terlihat sebagai berikut:
Alasan saya memilih untuk menggunakan Number () vs. parseFloat () adalah karena saya tidak harus melakukan validasi tambahan baik untuk string input kosong, maupun nilai NaN. Fungsi Number () akan secara otomatis menangani string kosong dan diam-diam menjadi nol.
sumber
Saya suka:
Bulatkan angka dengan 2 angka desimal, lalu pastikan untuk menguraikannya dengan
parseFloat()
mengembalikan angka , bukan string kecuali Anda tidak peduli apakah itu string atau angka.sumber
parseFloat("1.00") // 1
Perpanjang objek Matematika dengan metode presisi
sumber
parseInt(number * 100) / 100;
bekerja untukku.sumber
berikut ini adalah solusi lain untuk hanya menggunakan floor, artinya, memastikan jumlah yang dihitung tidak akan lebih besar dari jumlah semula (terkadang diperlukan untuk transaksi):
sumber
Anda dapat mencoba kode ini:
sumber
Coba kode di bawah ini:
sumber
sumber
Inilah cara saya memecahkan masalah saya:
sumber