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


68

我想格式化一个包含浮点变量的字符串,其中包括带有固定小数点的浮点变量,并且我想使用这种格式语法来做到这一点:

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

我想获得Current amount: 3.14

我知道我可以做到

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

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


1
有无数种方法可以解决任何编程问题,但是有些方法比其他方法要好得多。您为什么不想为这项工作使用正确的工具?
乔纳斯·舒伯特·埃兰森

查看下面的答案:没有哪一种与%运算符一样干净。我会坚持下去。
马丁

Answers:


53

用途round

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

喔好吧。我在IRB中尝试了代码。那没起效。但是我系统的Ruby版本是1.8.7。
比约恩森2012年

24
不确定这一点-如果您的电话号码是11.3,而您想要11.30,则不会获得正确的格式...
xmjw

2
同时,11变成11.0,也可能不是您想要的。
菲尔2014年

我刚刚发现amount.round(2).to_s.chomp('.0'),这很丑陋,但我认为它对我有用。
菲尔2014年

不适用于这类数字5.684999905497534e-06 。在a.round(5)将产生1.0e-05,而'%.5f' % a产量"0.00001"
I_do_python

71

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

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

4
当心不同的取整:"%.2f" % 1.345 => "1.34" "%.2f" % 1.346 => "1.35" "%.2f" % 1.345.round(2) => "1.35" "%.2f" % 1.346.round(2) => "1.35"
朱利叶斯·戈纳

高兴


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.