JRuby 1.6.x. Bagaimana Anda mengitari pelampung ke tempat desimal di jruby.
number = 1.1164
number.round(2)
The above shows the following error
wrong number of arguments (1 for 0)
Bagaimana saya membulatkan ini ke 2 tempat desimal?
Putaran float # dapat mengambil parameter di Ruby 1.9, bukan di Ruby 1.8. JRuby default ke 1.8, tetapi mampu berjalan dalam mode 1.9 .
sumber
(5.6).round(2)
hanya mengembalikan 5,6sprintf('%.2f', number)
adalah cara sulit untuk memformat angka. Hasilnya selalu berupa string, tetapi karena Anda membulatkannya saya menganggap Anda melakukannya untuk tujuan presentasi.sprintf
dapat memformat angka apa pun dengan cara apa pun yang Anda suka, dan masih banyak lagi.Dokumentasi sprintf lengkap: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
sumber
'%.2f' % number
juga karya lebih sering dilihat, setidaknya dalam pengalaman saya.sprintf
(atauformat
)%
versi. Beberapa alasan untuk itu dibahas di sini , sebagian besar tentang keterbacaan. Bukan berarti kita semua harus mengikuti panduan gaya, hanya memberikan beberapa alasan :)0.566666666666666
berkeliling ke0.57
"%.2f"
membulatkan5
ke bawah, bukannya ke atas, apakah ada cara untuk memperbaikinya?Edit
Setelah mendapatkan umpan balik, sepertinya solusi asli tidak berhasil. Itu sebabnya memperbarui jawabannya sebagai salah satu saran.
Jawaban lain mungkin berhasil, jika Anda ingin memiliki angka bulat 2 tempat desimal. Tapi, Jika Anda ingin memiliki angka floating point dengan dua tempat desimal pertama tanpa pembulatan , jawaban itu tidak akan membantu.
Jadi, untuk mendapatkan angka floating point dengan dua desimal pertama, saya menggunakan teknik ini. Dalam beberapa kasus tidak berfungsi
dengan
5.666666666666666666666666
, itu akan kembali5.66
bukannya bulat5.67
. Semoga ini bisa membantu seseorangsumber
def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end
Atau jauh lebih sederhana yang dapat Anda gunakanfloat_n.to_d.round(2, :truncate).to_f
11111111111111111.222222222222222
input, pertunjukan pertama1.11
dan pertunjukan kedua1.11111111111111e+16
Coba ini:
sumber
untuk memotong desimal saya telah menggunakan kode follow:
Jika Anda ingin memotong menjadi 2 desimal, Anda harus menggunakan
Integr(a*100)*0.01
sumber