Yanıtlar:
Float # round, Ruby 1.8'de değil Ruby 1.9'da bir parametre alabilir. JRuby varsayılan olarak 1.8'dir, ancak 1.9 modunda çalışabilir .
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
sadece 5.6'ya dönüyor
sprintf('%.2f', number)
sayıları biçimlendirmenin şifreli ama çok güçlü bir yoludur. Sonuç her zaman bir dizedir, ancak yuvarladığınız için bunu zaten sunum amacıyla yaptığınızı varsayıyorum. sprintf
herhangi bir sayıyı neredeyse istediğiniz şekilde biçimlendirebilir ve çok daha fazlasını yapabilirsiniz.
Tam sprintf belgeleri: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
'%.2f' % number
en azından tecrübelerime göre işler daha sık görülür.
sprintf
(veya format
) tercih eder %
. Bunun bazı nedenleri burada tartışılmaktadır , çoğunlukla okunabilirlikle ilgilidir. Hepimiz sadece bazı nedenlerle stil rehberini takip etmek zorunda değiliz :)
0.566666666666666
yuvarlar0.57
"%.2f"
mermi 5
aşağı yerine up, bunu düzeltmek için herhangi bir yolu var mı?
Geri bildirim aldıktan sonra, orijinal çözüm işe yaramadı gibi görünüyor. Bu nedenle cevabı önerilerden biri olarak güncelledi.
def float_of_2_decimal(float_n)
float_n.to_d.round(2, :truncate).to_f
end
Yuvarlanmış 2 ondalık basamak sayısına sahip olmak istiyorsanız, diğer yanıtlar işe yarayabilir. Ancak, yuvarlamadan ilk iki ondalık basamaklı kayan nokta numaralarına sahip olmak istiyorsanız , Bu cevaplar yardımcı olmaz.
Bu nedenle, ilk iki ondalık basamaklı bir kayan nokta sayısı elde etmek için bu tekniği kullandım. Bazı durumlarda çalışmaz
def float_of_2_decimal(float_n)
float_n.round(3).to_s[0..3].to_f
end
ile 5.666666666666666666666666
, 5.66
yuvarlak yerine dönecektir 5.67
. Umarım birine yardım eder
def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end
Veya daha basitfloat_n.to_d.round(2, :truncate).to_f
11111111111111111.222222222222222
bir giriş olarak, ilk gösterir 1.11
, ikincisi gösterir1.11111111111111e+16
Bunu dene:
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
ondalık kesilecek aşağıdaki kodu kullandım:
<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>
2 ondalığa kısaltmak istiyorsanız şunu kullanmalısınız: Integr(a*100)*0.01