Wie formatiere ich einen String mit Floats in Ruby mit # {variable}?


68

Ich möchte eine Zeichenfolge formatieren, die Float-Variablen enthält, einschließlich dieser mit einer festen Anzahl von Dezimalstellen, und ich möchte dies mit dieser Art von Formatierungssyntax tun:

amount = Math::PI
puts "Current amount: #{amount}"

und ich möchte erhalten Current amount: 3.14.

Ich weiß, dass ich es schaffen kann

amount = Math::PI
puts "Current amount %.2f" % [amount]

aber ich frage, ob es möglich ist, es im #{}Weg zu tun .


1
Es gibt unendlich viele Möglichkeiten, Programmierprobleme zu lösen, aber einige sind viel besser als andere. Warum möchten Sie nicht das richtige Werkzeug für diesen Job verwenden?
Jonas Schubert Erlandsson

Schauen Sie sich die Antworten unten an: Keiner ist so sauber wie der% -Operator. Ich bleibe dabei.
Martin

Antworten:


53

Verwendung round:

"Current amount: #{amount.round(2)}"

Ah, ok. Ich habe den Code in meinem IRB ausprobiert. Es hat nicht funktioniert. Aber die Ruby-Version meines Systems ist 1.8.7.
Bjoernsen

24
Ich bin mir nicht sicher - wenn
Ihre

2
In der Zwischenzeit wird 11 zu 11.0, was möglicherweise auch nicht das ist, was Sie wollen.
Philh

Ich habe gerade entdeckt amount.round(2).to_s.chomp('.0'), was hässlich ist, aber ich denke, es funktioniert für meine Zwecke.
Philh

Dies funktioniert nicht für Zahlen wie 5.684999905497534e-06 . Die a.round(5)nachgeben 1.0e-05, während '%.5f' % aAusbeuten"0.00001"
I_do_python

71

Sie können verwenden "#{'%.2f' % var}":

irb(main):048:0> num = 3.1415
=> 3.1415
irb(main):049:0> "Pi is: #{'%.2f' % num}"
=> "Pi is: 3.14"

4
Vorsicht vor unterschiedlichen Rundungen:"%.2f" % 1.345 => "1.34" "%.2f" % 1.346 => "1.35" "%.2f" % 1.345.round(2) => "1.35" "%.2f" % 1.346.round(2) => "1.35"
Juliusz Gonera

Wäre toll, einen Link zur Dokumentation zu sehen
yegor256


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.