2009-12-21 11 views
58

Ich bin total Begineer in Rubin so seine sehr Anfänger Frage.Verketten String mit Nummer in Rubin

Ich versuche, eine Zeichenfolge mit einem Float-Wert wie folgt zu verketten und dann zu drucken.

total_revenue_of_east_cost ist eine variable halte float wert, wie kann ich es drucken lassen?

Antwort

84

Dies ist nicht gerade Verkettung aber es wird die Arbeit, die Sie tun möchten, tun:

puts " Total Revenue of East Cost: #{total_revenue_of_east_cost}" 

Technisch ist diese Interpolation. Der Unterschied besteht darin, dass die Verkettung zum Ende eines Strings hinzugefügt wird, wobei bei der Interpolation ein Bit Code ausgewertet und in den String eingefügt wird. In diesem Fall kommt die Einfügung am Ende der Zeichenfolge.

Ruby wertet alles zwischen geschweiften Klammern in einer Zeichenfolge aus, wobei der öffnenden Klammer eine Oktothorpe vorausgeht.

+0

Dank, kann ich wissen, um die Regel hier für Verkettung? – itsaboutcode

+8

Solange die Zeichenkette in Anführungszeichen steht ... – Mike

+6

octothorpe ist die USA sprechen für Hash;) – ravi

48

Stephen Doyle's Antwort, mit einer Technik bekannt als "String-Interpolation" ist richtig und wahrscheinlich die einfachste Lösung, aber es gibt einen anderen Weg. Durch den Aufruf einer objects to_s-Methode kann dieses Objekt in eine Zeichenkette zum Drucken konvertiert werden. Also wird das Folgende auch funktionieren.

puts " Total Revenue of East Cost: " + total_revenue_of_east_cost.to_s 
+0

hmm, vielen Dank. – itsaboutcode

+2

BTW: String-Interpolation ruft 'to_s' automatisch auf, wenn das Ergebnis des interpolierten Ausdrucks noch kein' String' ist. –

7

Für Ihr Beispiel möchten Sie möglicherweise etwas spezifischer als die to_s-Methode. Schließlich enthält to_s auf einem Float oft mehr oder weniger Genauigkeit, als Sie anzeigen möchten.

In diesem Fall

puts " Total Revenue of East Coast: #{sprintf('%.02f', total_revenue_of_east_coast)}" 

könnte besser sein. # {} kann jede Art von Ruby-Code verarbeiten, so dass Sie sprintf oder eine andere Formatierungsmethode verwenden können.

5

Ich mag (Klasse String% für Details):

puts " Total Revenue of East Coast: " + "%.2f" % total_revenue_of_east_coast 
+0

Wie formatiert man mit einem Hash: "% 002d"% 23 -> 023. "% {k}"% {k: 23} -> 23. Wie bekomme ich "023" ?. – jgomo3

+0

Also "% 002d"% 23 -> 23 nicht 023. Wenn gefunden "% 03d"% 23 -> 023. Um nun die Daten aus einem Hash anstelle einer festen Zahl zu verwenden, ändern Sie nicht die Formatzeichenfolge . Tun Sie einfach etwas wie "% 03d"% {k: 23} [: k] -> 023 –

+1

Stil Ich werde die Vorteile der Verwendung eines Hash anstelle einer Liste verlieren. zB "Hallo {Name}, ich bin froh, dass dein {Zeug} ... ist. Also, {Name}: Was macht dein {Zeug} bla bla bla? ... {Zeug} ... {Name}"% { : name => "Jesús",: stuff => "pet"}. Stellen Sie sich vor, dass Sie mit einer Liste "Name" und "Zeug" mehrmals wiederholen müssen. Und jetzt will ich diesen Vorteil plus in der Lage sein zu formatieren. Wie? – jgomo3

0

Beispiel bucle

(1..100).each do |i| puts "indice #{i} " end 
+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag - du kannst deine eigenen Beiträge jederzeit kommentieren, und sobald du genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) hast, wirst du das tun in der Lage sein [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment). – Palpatim