Verkettung der Zeichenfolge mit der Nummer in Ruby


68

Ich bin ein totaler Anfänger in Rubin, also ist es eine sehr neue Frage.

Ich versuche, eine Zeichenfolge mit einem Gleitkommawert wie folgt zu verketten und dann zu drucken.

puts " Total Revenue of East Cost: " + total_revenue_of_east_cost 

total_revenue_of_east_cost ist eine Variable mit Float-Wert. Wie kann ich sie drucken lassen?

Antworten:


101

Dies ist nicht gerade eine Verkettung, aber es erledigt den Job, den Sie machen möchten:

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

Technisch gesehen ist dies Interpolation. Der Unterschied besteht darin, dass die Verkettung am Ende einer Zeichenfolge hinzugefügt wird, wobei die Interpolation ein Stück Code auswertet und in die Zeichenfolge einfügt. In diesem Fall befindet sich die Einfügung am Ende Ihrer Zeichenfolge.

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


Danke, kann ich die Regel für die Verkettung hier kennen?
ungefähr Code

6
Octothorpe ist die USA sprechen für Hash;)
Ravi

55

Stephen Doyles Antwort mit einer als "String-Interpolation" bekannten Technik ist richtig und wahrscheinlich die einfachste Lösung, es gibt jedoch einen anderen Weg. Durch Aufrufen einer object to_s-Methode kann dieses Objekt zum Drucken in eine Zeichenfolge konvertiert werden. Das Folgende wird also auch funktionieren.

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

2
Übrigens: String-Interpolation wird to_sautomatisch aufgerufen , wenn das Ergebnis des interpolierten Ausdrucks noch nicht vorhanden ist String.
Jörg W Mittag

7

In Ihrem Beispiel möchten Sie möglicherweise etwas Spezifischeres als die to_s-Methode. Schließlich enthalten to_s auf einem Float häufig 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 mit jedem Ruby-Code umgehen, sodass Sie sprintf oder eine andere gewünschte Formatierungsmethode verwenden können.


5

Ich mag (siehe Class String% für Details):

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

Formatieren bei Verwendung eines Hash: "% 002d"% 23 -> 023. "% {k}"% {k: 23} -> 23. Wie erhalte ich "023"?.
jgomo3

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

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

h = {: name => 'bob' ,: stuff => 23} sprintf ("name =% s, value =% 03d", h [: name], h [: stuff])
Steve Wilhelm

Immer noch das gleiche Problem. Auf diese Weise müssen Sie die Werte einzeln in der Reihenfolge auflisten, in der sie in der Vorlage angezeigt werden. So beziehen Sie sich auf die Werte nach Namen aus der Vorlage und wenden gleichzeitig eine Formatierung an (dh numerische Formatierung% 02d).
jgomo3

0

Beispiel bucle

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

Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klarstellung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. Sie können jederzeit Ihre eigenen Beiträge kommentieren. Sobald Sie einen ausreichenden Ruf haben, können Sie jeden Beitrag kommentieren .
Palpatim
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.