JRuby 1.6.x. Wie rundet man einen Float in jruby auf Dezimalstellen?
number = 1.1164
number.round(2)
The above shows the following error
wrong number of arguments (1 for 0)
Wie runde ich das auf 2 Dezimalstellen?
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 .
quelle
(5.6).round(2)
kehrt nur 5.6sprintf('%.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
quelle
'%.2f' % number
Auch Arbeiten sind häufiger zu sehen, zumindest nach meiner Erfahrung.sprintf
(oderformat
) 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"
Runden5
statt nach oben nach unten, ist es eine Möglichkeit , das zu beheben?Bearbeiten
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.
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
mit
5.666666666666666666666666
wird es zurückgegeben5.66
anstatt gerundet5.67
. Hoffe es wird jemandem helfenquelle
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 Shows1.11
und zweiten Shows1.11111111111111e+16
Versuche dies:
quelle
Um eine Dezimalstelle abzuschneiden, habe ich den folgenden Code verwendet:
Wenn Sie auf 2 Dezimalstellen kürzen möchten, sollten Sie verwenden
Integr(a*100)*0.01
quelle