2012-09-12 11 views
48

Ben bir dize ondalık sabit miktarda onlara dahil yüzer değişkenleri içeren biçimlendirmek istiyoruz ve ben biçimlendirme sözdizimi bu tür yapmak istiyorum:Ruby'de # string değişkenini kullanarak bir dizgiyi float ile biçimlendirme nasıl yapılır?

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

ve ben Current amount: 3.14 elde etmek istiyorum.

ben

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

ile yapabilirsiniz biliyorum ama #{} şekilde yapmak mümkün olup olmadığını soruyorum.

+0

herhangi bir programlama sorunu çözmek için sonsuz yolu vardır, fakat bazıları diğerlerinden daha çok daha iyi. Neden bu iş için doğru aracı kullanmak istemiyorsun? –

cevap

40

Kullanım round:

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

Hiçbir ray gerekli değildir: http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round –

+0

Ah, tamam. Kodu IRB'de denedim. İşe yaramadı. Ama sistemimin Ruby versiyonu 1.8.7. – Bjoernsen

+18

Bu konuda emin değilim - 11.3 sayısı ve 11.30 istiyorsanız, doğru formatı alamazsınız ... – xmjw

32

Bunu yapabilirsin ama String#% versiyonunu tercih:

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

@Bjoernsen belirttiği gibi, round en basit yaklaşımdır ve aynı zamanda çalışır Standart Ruby (1.9), sadece Raylar:

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

+0

Dize sürümünü neden tercih edersiniz? – Bjoernsen

+0

Çünkü basit ifadeler için enterpolasyonu ayırmaya çalışıyorum. –

5

Evet, bu mümkün: Sen "#{'%.2f' % var}" kullanabilirsiniz

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

:

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

bu kabul edilen cevap olmalıdır. Farklı yuvarlama dikkat – Fatih

+3

: ' "% 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

Harika olurdu belgelere bağlantı görmek için – yegor256

İlgili konular