Ich habe Probleme beim Runden. Ich habe einen Float, den ich auf die Hundertstel Dezimalstelle runden möchte. Ich kann jedoch nur verwenden, .round
was es im Grunde in ein int verwandelt, was bedeutet, dass 2.34.round # => 2.
es einen einfachen Effekt gibt, um so etwas zu tun2.3465 # => 2.35
ruby-on-rails
ruby
rounding
user211662
quelle
quelle
sprintf '%.2f', 2.3465
funktioniert auch.2.3000.round(2) => 2.3
undsprintf '%.2f', 2.300 => 2.30
. Meiner Meinung nach ist dies ein Fehler in round (), oder es sollte eine Option geben, um nachgestellte Nullen beizubehalten.2.3000.round(2)
ist eine Zahl, keine Zeichenfolge. Es gibt keine Möglichkeit, dass sich die Zahl von2.3
unterscheidet2.30
, daher gibt es keine Möglichkeit, nachfolgende Nullen beizubehalten. Sie könnten Ihre eigene Klasse von Zahlen mit Bedeutung erstellen, aber dann haben wir bereits Zeichenfolgen.'%.3f' % 1.2345
(3 Dezimalstellen, nicht 2) !! Gleiches gilt auch fürsprintf
. In acht nehmen. Das wird=> 1.234
nicht=> 1.235
so zurückkehren , wie die meisten erwarten würden (iow, nach der 2. Dezimalstelle, rundet sprintf 5 ab und rund 6 nur auf). Aus diesem Grund hat der Kommentar von Kit Ho oben mehr als 25 positive Stimmen. Sicherer zu verwenden,'%.3f' % 1.2345.round(3)
daher wird die Zahl zuerst richtig gerundet.round
und dann formatiert (ggf. mit nachgestellten Nullen).Übergeben Sie ein Argument an round, das die Anzahl der Dezimalstellen enthält, auf die gerundet werden soll
quelle
1.1.round(2)
=>1.1
nicht1.10
Sie können dies zum Runden auf eine Präzision verwenden.
quelle
Sie können eine Methode in Float Class hinzufügen. Dies habe ich aus dem Stackoverflow gelernt:
quelle
Sie können auch eine negative Zahl als Argument für die
round
Methode angeben, um auf das nächste Vielfache von 10, 100 usw. zu runden.quelle
quelle
was ist mit
(2.3465*100).round()/100.0
?quelle
Wenn Sie es nur anzeigen müssen, würde ich den Helfer number_with_precision verwenden . Wenn Sie es woanders brauchen, würde ich, wie Steve Weet betonte, die
round
Methode anwendenquelle
number_with_precision
nur eine Rails-Methode ist.Für Ruby 1.8.7 können Sie Ihrem Code Folgendes hinzufügen:
quelle