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. sprintfkann 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' % numberAuch 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.566666666666666Runden zu0.57
"%.2f"Runden 5statt 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.666666666666666666666666wird es zurückgegeben 5.66anstatt 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.222222222222222als Eingabe, erste Shows 1.11und 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