2012-09-12 13 views
48

Chciałbym sformatować ciąg zawierający zmienne wolnym obrocie w tym ich ze stałą ilością miejsc po przecinku, i chciałbym to zrobić z tego rodzaju składni formatowania:Jak sformatować ciąg za pomocą spławik w Ruby za pomocą # {zmiennej}?

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

i chciałbym uzyskać Current amount: 3.14.

wiem, że mogę to zrobić z

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

ale pytam, czy jest możliwe, aby to zrobić w sposób #{}.

+0

Istnieje nieskończona sposoby rozwiązania żadnego problemu programowania, ale niektóre są dużo lepsze niż inne. Dlaczego nie chcesz użyć odpowiedniego narzędzia do tej pracy? –

Odpowiedz

40

Zastosowanie round:

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

Żadne tory nie są konieczne: http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round –

+0

Ah, ok. Próbowałem kodu w moim IRB. Nie działało. Ale wersja Ruby mojego systemu to 1.8.7. – Bjoernsen

+18

Nie jestem pewien - jeśli masz numer 11.3 i chcesz 11.30, nie otrzymasz poprawnego formatu ... – xmjw

32

Można to zrobić, ale ja wolę wersję String#%:

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

Jak @Bjoernsen wskazał, round jest najprostszym podejściem a także współpracuje z standardowy Ruby (1.9), nie tylko Railsy:

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

+0

Dlaczego preferujesz wersję String? – Bjoernsen

+0

Ponieważ staram się zarezerwować interpolację dla prostych wyrażeń. –

5

Tak, jest to możliwe:

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

Można użyć "#{'%.2f' % var}":

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

to powinna być zaakceptowana odpowiedź. – Fatih

+3

Uwaga różnych zaokrąglenia: ' '' "% .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

Byłoby świetnie aby zobaczyć link do dokumentacji – yegor256

Powiązane problemy