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.