Odpowiedzi:
Okrągły float # może przyjąć parametr w Ruby 1.9, a nie w Ruby 1.8. JRuby domyślnie wynosi 1,8, ale może działać w trybie 1,9 .
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
wraca tylko 5,6
sprintf('%.2f', number)
to tajemniczy, ale bardzo skuteczny sposób formatowania liczb. Wynik jest zawsze ciągiem, ale ponieważ zaokrąglasz, zakładam, że i tak robisz to w celach prezentacyjnych. sprintf
możesz formatować dowolną liczbę prawie w dowolny sposób, i wiele więcej.
Pełna dokumentacja sprintf: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
'%.2f' % number
również działa częściej, przynajmniej z mojego doświadczenia.
sprintf
(lub format
) %
wersję. Omówiono tutaj pewne powody , głównie dotyczące czytelności. Nie żebyśmy wszyscy musieli postępować zgodnie z przewodnikiem po stylu, podając tylko kilka powodów :)
0.566666666666666
zaokrągla do0.57
"%.2f"
zaokrągla w 5
dół zamiast w górę, czy jest jakiś sposób, aby to naprawić?
Po otrzymaniu opinii wydaje się, że oryginalne rozwiązanie nie działa. Dlatego zaktualizowałem odpowiedź jako jedną z sugestii.
def float_of_2_decimal(float_n)
float_n.to_d.round(2, :truncate).to_f
end
Inne odpowiedzi mogą działać, jeśli chcesz mieć zaokrąglone liczby do 2 miejsc po przecinku. Ale jeśli chcesz mieć liczby zmiennoprzecinkowe z pierwszymi dwoma miejscami po przecinku bez zaokrąglania , te odpowiedzi nie pomogą.
Tak więc, aby uzyskać liczbę zmiennoprzecinkową z pierwszymi dwoma miejscami po przecinku, użyłem tej techniki. W niektórych przypadkach nie działa
def float_of_2_decimal(float_n)
float_n.round(3).to_s[0..3].to_f
end
z 5.666666666666666666666666
, zwróci 5.66
zamiast zaokrąglenia 5.67
. Mam nadzieję, że to komuś pomoże
def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end
Lub znacznie prostszy możesz użyćfloat_n.to_d.round(2, :truncate).to_f
11111111111111111.222222222222222
jako wejście, pierwszy ONE 1.11
i druga pokazuje1.11111111111111e+16
Spróbuj tego:
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
aby obciąć ułamek dziesiętny, użyłem następującego kodu:
<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>
Jeśli chcesz skrócić do 2 miejsc po przecinku, użyj Integr(a*100)*0.01