Saya mengalami masalah pembulatan. Saya memiliki float, yang ingin saya bulatkan ke seratus desimal. Namun, saya hanya bisa menggunakan .round
yang pada dasarnya mengubahnya menjadi int, artinya 2.34.round # => 2.
Adakah cara efek sederhana untuk melakukan sesuatu seperti2.3465 # => 2.35
ruby-on-rails
ruby
rounding
pengguna211662
sumber
sumber
sprintf '%.2f', 2.3465
juga berfungsi.2.3000.round(2) => 2.3
dansprintf '%.2f', 2.300 => 2.30
. Menurut pendapat saya ini adalah cacat round (), atau seharusnya memiliki opsi untuk menjaga nol trailing.2.3000.round(2)
adalah angka, bukan string. Tidak mungkin nomornya2.3
berbeda2.30
, jadi tidak ada cara untuk memiliki opsi untuk melestarikan angka nol. Anda dapat membuat kelas number_with_significance Anda sendiri tetapi kemudian kami sudah memiliki string.'%.3f' % 1.2345
(3 desimal tempat, tidak 2), namun !! Samasprintf
juga. Awas. Itu akan kembali=> 1.234
tidak=> 1.235
seperti yang diharapkan kebanyakan (iow, setelah desimal ke-2, putaran sprintf 5 turun dan hanya putaran 6 ke atas). Itu sebabnya komentar Kit Ho di atas memiliki 25+ upvotes. Lebih aman untuk digunakan,'%.3f' % 1.2345.round(3)
sehingga angka dibulatkan dengan benar.round
terlebih dahulu, lalu diformat (dengan trailing nol, jika perlu).Berikan argumen ke putaran yang berisi jumlah tempat desimal untuk dibulatkan
sumber
1.1.round(2)
=>1.1
tidak1.10
Anda dapat menggunakan ini untuk pembulatan ke penjara ..
sumber
Anda dapat menambahkan metode di Float Class, saya belajar ini dari stackoverflow:
sumber
Anda juga bisa memberikan angka negatif sebagai argumen
round
metode untuk membulatkan ke kelipatan terdekat dari 10, 100 dan seterusnya.sumber
sumber
bagaimana
(2.3465*100).round()/100.0
?sumber
Jika Anda hanya perlu menampilkannya, saya akan menggunakan bantuan number_with_precision . Jika Anda membutuhkannya di tempat lain saya akan menggunakan, seperti yang ditunjukkan Steve Weet,
round
metodesumber
number_with_precision
ini adalah metode Rails-only.Untuk ruby 1.8.7 Anda bisa menambahkan yang berikut ini ke kode Anda:
sumber