2012-09-12 3 views
48

Ich möchte eine Zeichenfolge mit float Variablen zu formatieren sie mit einem festen Betrag von Dezimalstellen einschließlich, und ich würde es mit dieser Art der Formatierung Syntax tun:Wie formatiert man einen String mit Floats in Ruby mit # {variable}?

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

und ich möchte Current amount: 3.14 erhalten.

Ich weiß, ich kann es tun, mit

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

aber ich gefragt, ob es möglich ist, es in die #{} Art und Weise zu tun.

+0

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

Antwort

40

Verwendung round:

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

Keine Schienen erforderlich: http://www.ruby-doc.org/core-1.9.3/Float.html#method-iround –

+0

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

+18

Nicht sicher darüber - wenn Sie Nummer 11.3 und Sie 11.30 haben, erhalten Sie nicht das richtige Format ... – xmjw

32

Sie können dies tun, aber ich ziehe die String#% Version:

puts "Current amount: #{format("%.2f", amount)}" 

Wie @Bjoernsen darauf hingewiesen, round ist der einfachste Ansatz und es funktioniert auch mit Standard Ruby (1.9), nicht nur Schienen:

http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round

+0

Warum bevorzugen Sie die String-Version? – Bjoernsen

+0

Weil ich versuche, die Interpolation für einfache Ausdrücke zu reservieren. –

5

Ja, es ist möglich:

puts "Current amount: #{sprintf('%.2f', amount)}" 
41

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

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

Dies sollte die akzeptierte Antwort sein. – Fatih

+3

Hüten Sie sich vor verschiedenen Runden: '' ' "% .2f" % 1.345 => "1.34"' '' '' ' "% .2f" % 1.346 => "1.35"' '' '' ' "% .2f"% 1.345.round (2) => "1.35" '' ' ' '' "% .2f"% 1.346.round (2) => "1.35" '' ' –

+0

Wäre großartig um einen Link zur Dokumentation zu sehen – yegor256

Verwandte Themen