Antworten:
Float # round kann einen Parameter in Ruby 1.9 annehmen, nicht in Ruby 1.8. JRuby ist standardmäßig 1.8, kann jedoch im 1.9-Modus ausgeführt werden .
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
kehrt nur 5.6
sprintf('%.2f', number)
ist eine kryptische, aber sehr leistungsfähige Methode zum Formatieren von Zahlen. Das Ergebnis ist immer eine Zeichenfolge, aber da Sie runden, gehe ich davon aus, dass Sie dies trotzdem zu Präsentationszwecken tun. sprintf
kann jede Zahl fast beliebig formatieren und vieles mehr.
Vollständige Sprintf-Dokumentation: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
'%.2f' % number
Auch Arbeiten sind häufiger zu sehen, zumindest nach meiner Erfahrung.
sprintf
(oder format
) die %
Version. Einige Gründe dafür werden hier diskutiert , es geht hauptsächlich um Lesbarkeit. Nicht, dass wir alle dem Styleguide folgen müssen, nur um einige Gründe zu nennen :)
0.566666666666666
Runden zu0.57
"%.2f"
Runden 5
statt nach oben nach unten, ist es eine Möglichkeit , das zu beheben?
Nachdem Sie Feedback erhalten haben, scheint die ursprüngliche Lösung nicht funktioniert zu haben. Deshalb wurde die Antwort als einer der Vorschläge aktualisiert.
def float_of_2_decimal(float_n)
float_n.to_d.round(2, :truncate).to_f
end
Andere Antworten können funktionieren, wenn Sie gerundete Zahlen mit 2 Dezimalstellen haben möchten. Wenn Sie jedoch Gleitkommazahlen mit den ersten beiden Dezimalstellen ohne Rundung haben möchten, helfen diese Antworten nicht weiter.
Um eine Gleitkommazahl mit den ersten beiden Dezimalstellen zu erhalten, habe ich diese Technik verwendet. Funktioniert in einigen Fällen nicht
def float_of_2_decimal(float_n)
float_n.round(3).to_s[0..3].to_f
end
mit 5.666666666666666666666666
wird es zurückgegeben 5.66
anstatt gerundet 5.67
. Hoffe es wird jemandem helfen
def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end
Oder viel einfacher können Sie verwendenfloat_n.to_d.round(2, :truncate).to_f
11111111111111111.222222222222222
als Eingabe, erste Shows 1.11
und zweiten Shows1.11111111111111e+16
Versuche dies:
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
Um eine Dezimalstelle abzuschneiden, habe ich den folgenden Code verwendet:
<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>
Wenn Sie auf 2 Dezimalstellen kürzen möchten, sollten Sie verwenden Integr(a*100)*0.01