Bisakah Anda membulatkan angka dalam javascript ke 1 karakter setelah titik desimal (dibulatkan dengan benar)?
Saya mencoba * 10, round, / 10 tetapi ia meninggalkan dua desimal di ujung int.
javascript
rounding
Pejalan
sumber
sumber
Math.round(n * 10) / 10
tidak bekerja. Apa kodemu?Jawaban:
Math.round(num * 10) / 10
berfungsi, berikut adalah contohnya ...jika Anda ingin memiliki satu tempat desimal, bahkan ketika itu akan menjadi 0, maka tambahkan ...
EDIT: Tambahkan putaran dengan fungsi presisi ...
Menggunakan prinsip ini, untuk referensi, berikut adalah fungsi bundar kecil praktis yang membutuhkan ketelitian ...
... penggunaan ...
... default untuk membulatkan ke bilangan bulat terdekat (presisi 0) ...
... dan dapat digunakan untuk membulatkan ke 10 atau 100 dll terdekat ...
... dan penanganan yang benar dari angka negatif ...
... dan dapat dikombinasikan dengan toFixed untuk memformat secara konsisten sebagai string ...
sumber
.toFixed()
karena mengembalikan string ketika Anda mungkin menginginkan nomor.parseFloat
akan menghapus desimal yang tersisa.toFixed()
jika itu bilangan bulat (nol). Secara umum, jika Anda ingin menghitung, yang terbaik adalah mengikuti contoh pertama Anda. Jika Anda ingin menampilkan nomor di UI Anda, gunakan.toFixed()
..toFixed()
karena dapat mengembalikan hasil pembulatan yang berbeda untuk browser yang berbeda. Baca posting ini untuk detail tentang topik ini!sumber
toFixed()
ada gangguan - Saya telah melihatnya di browser Chrome tempat saya menelepontoFixed()
, lalu mengonversi ke string, dan itu menunjukkan sesuatu seperti10.00000000068
- aneh. Tidak dapat mereproduksi ini dengan andal..toFixed()
karena mengembalikanString
ketika Anda mungkin menginginkanNumber
Jika Anda menggunakan
Math.round(5.01)
Anda akan mendapatkan5
bukan5.0
.Jika Anda menggunakan
toFixed
Anda mengalami masalah pembulatan .Jika Anda menginginkan yang terbaik dari kedua dunia, kombinasikan keduanya:
Anda mungkin ingin membuat fungsi untuk ini:
sumber
lodash
memilikiround
metode:Documents .
Sumber .
sumber
Saya memilih
toFixed()
, tetapi, untuk catatan, inilah cara lain yang menggunakan sedikit pergeseran untuk melemparkan nomor ke int. Jadi, selalu membulatkan ke nol (turun untuk angka positif, naik untuk negatif).Tapi hei, karena tidak ada panggilan fungsi, itu cepat jahat. :)
Dan inilah yang menggunakan pencocokan string:
Saya tidak merekomendasikan menggunakan varian string, katakan saja.
sumber
Coba dengan ini:
kurang rumit dan lebih mudah diimplementasikan ...
dengan ini, Anda dapat membuat fungsi untuk dilakukan:
Tampilkan cuplikan kode
EDIT : lihat ini Cara membulatkan menggunakan ROUND HALF UP. Mode pembulatan yang sebagian besar dari kita diajarkan di sekolah dasar
sumber
x = angka, n = tempat desimal:
sumber
Kenapa tidak adil?
sumber
sumber
Untuk melengkapi Jawaban Terbaik:
Nomor parameter input mungkin "tidak" selalu berupa angka, dalam hal ini .toFixed tidak ada.
sumber
ES 6 Versi dari Jawaban yang Diterima:
sumber
Menggunakan metode toPrecision:
sumber
12.345.toPrecision( 2 )
itu"12"
.Jika metode Anda tidak berhasil, harap kirim kode Anda.
Namun, Anda bisa menyelesaikan tugas pembulatan sebagai:
Akan memberimu 234.56
Demikian pula
Akan memberi 234.5
Dengan cara ini Anda bisa menggunakan variabel menggantikan konstanta seperti yang digunakan di atas.
sumber
Filter Little Angular jika ada yang menginginkannya:
gunakan jika melalui:
:)
sumber
Secara umum, pembulatan dilakukan dengan penskalaan:
round(num / p) * p
Menggunakan notasi eksponensial menangani pembulatan + ve angka, dengan benar. Namun, metode ini gagal membulatkan tepi-kasus dengan benar.
Di sini, juga merupakan salah satu fungsi yang saya tulis untuk melakukan pembulatan aritmatika, Anda dapat mengujinya sendiri.
sumber
Ini tampaknya bekerja dengan andal di semua yang saya lemparkan:
Itu bulat, jadi Anda mungkin perlu memodifikasinya sesuai dengan kasus penggunaan. Ini seharusnya bekerja:
sumber
Jika Anda peduli tentang pembulatan yang tepat maka:
Jika tidak, maka Anda sudah mendapat balasan dari posting sebelumnya
sumber
Math.round( num * 10) / 10
tidak bekerjaMisalnya,
1455581777.8-145558160.4
memberi Anda1310023617.3999999
.Jadi hanya gunakan
num.toFixed(1)
sumber
Saya membuat satu yang mengembalikan tipe angka dan juga menempatkan desimal hanya jika diperlukan (no 0 padding).
Contoh:
Kode:
sumber
Saya menemukan cara untuk menghindari masalah presisi:
sumber
Terima kasih
sumber