Jawaban:
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 .
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
hanya mengembalikan 5,6
sprintf('%.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
'%.2f' % number
juga karya lebih sering dilihat, setidaknya dalam pengalaman saya.
sprintf
(atau format
) %
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"
membulatkan 5
ke bawah, bukannya ke atas, apakah ada cara untuk memperbaikinya?
Setelah mendapatkan umpan balik, sepertinya solusi asli tidak berhasil. Itu sebabnya memperbarui jawabannya sebagai salah satu saran.
def float_of_2_decimal(float_n)
float_n.to_d.round(2, :truncate).to_f
end
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
def float_of_2_decimal(float_n)
float_n.round(3).to_s[0..3].to_f
end
dengan 5.666666666666666666666666
, itu akan kembali 5.66
bukannya bulat 5.67
. Semoga ini bisa membantu seseorang
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 pertama 1.11
dan pertunjukan kedua1.11111111111111e+16
Coba ini:
module Util
module MyUtil
def self.redondear_up(suma,cantidad, decimales=0)
unless suma.present?
return nil
end
if suma>0
resultado= (suma.to_f/cantidad)
return resultado.round(decimales)
end
return nil
end
end
end
untuk memotong desimal saya telah menggunakan kode follow:
<th><%#= sprintf("%0.01f",prom/total) %><!--1dec,aprox-->
<% if prom == 0 or total == 0 %>
N.E.
<% else %>
<%= Integer((prom/total).to_d*10)*0.1 %><!--1decimal,truncado-->
<% end %>
<%#= prom/total %>
</th>
Jika Anda ingin memotong menjadi 2 desimal, Anda harus menggunakan Integr(a*100)*0.01