如何使用#{variable}在Ruby中使用浮点格式化字符串?

mar*_*ama 67 ruby

我想格式化一个包含浮点变量的字符串,包括固定数量的小数,我想用这种格式化语法来做:

amount = Math::PI
puts "Current amount: #{amount}"
Run Code Online (Sandbox Code Playgroud)

而且我想获得Current amount: 3.14.

我知道我可以做到

amount = Math::PI
puts "Current amount %.2f" % [amount]
Run Code Online (Sandbox Code Playgroud)

但我问是否有可能这样做#{}.

Spa*_*jus 68

你可以使用"#{'%.2f' % var}":

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

  • 小心不同的舍入:````%.2f"%1.345 =>"1.34"``````%.2f"%1.346 =>"1.35"``````%..2f"% 1.345.round(2)=>"1.35"``````%.2f"%1.346.round(2)=>"1.35"``` (3认同)

Bjo*_*sen 52

用途round:

"Current amount: #{amount.round(2)}"
Run Code Online (Sandbox Code Playgroud)

  • 不确定这个 - 如果你的数字是11.3并且你想要11.30你没有得到正确的格式...... (24认同)
  • 同时,11变为11.0,这可能也不是你想要的. (2认同)

Mic*_*ohl 34

你可以这样做,但我更喜欢这个String#%版本:

 puts "Current amount: #{format("%.2f", amount)}"
Run Code Online (Sandbox Code Playgroud)

正如@Bjoernsen指出的那样,round它是最直接的方法,它也适用于标准的Ruby(1.9),而不仅仅是Rails:

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


Luk*_*kal 6

是的,这是可能的:

puts "Current amount: #{sprintf('%.2f', amount)}"
Run Code Online (Sandbox Code Playgroud)