将字符串与红宝石中的数字连接


68

我是红宝石的初学者,所以它是新手的问题。

我正在尝试使用如下所示的float值连接字符串,然后将其打印出来。

puts " Total Revenue of East Cost: " + total_revenue_of_east_cost 

total_revenue_of_east_cost是一个保存浮点值的变量,我如何使它打印?

Answers:


101

这不是完全串联,但可以完成您想要的工作:

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

从技术上讲,这是插值。区别在于,串联会添加到字符串的末尾,在插值时,插值会评估一部分代码并将其插入到字符串中。在这种情况下,插入将出现在字符串的末尾。

Ruby将对字符串中的括号之间的任何内容进行评估,其中字符串开头的括号之前是八叉音。


谢谢,我能知道这里的连接规则吗?
aboutaboutcode

6
octothorpe是美国的哈希表;)
ravi

55

Stephen Doyle的答案(使用称为“字符串插值”的技术)是正确的,并且可能是最简单的解决方案,但是还有另一种方法。通过调用对象的to_s方法,该对象可以转换为字符串以进行打印。因此,以下内容也将起作用。

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

2
顺便说一句:to_s如果插值表达式的结果还不是,则字符串插值会自动调用String
约尔格W¯¯米塔格

7

对于您的示例,您可能需要比to_s方法更具体的东西。毕竟,浮点数上的to_s通常包含比您希望显示的精度更高或更低的精度。

在这种情况下,

puts " Total Revenue of East Coast: #{sprintf('%.02f', total_revenue_of_east_coast)}"

可能会更好。#{}可以处理任何红宝石代码,因此您可以使用sprintf或所需的任何其他格式化方法。


5

我喜欢(有关详细信息,请参见类字符串%):

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

使用哈希时如何格式化:“%002d”%23->023。“%{k}”%{k:23}-> 23.如何获取“ 023”?
jgomo3 2013年

因此,“%002d”%23-> 23不是023。如果找到“%03d”%23->023。现在要使用哈希中的数据而不是固定数字,请不要更改格式字符串。就像“%03d”%{k:23} [:k]-> 023
Steve Wilhelm

1
Stil我将失去使用哈希而不是列表的优势。即“您好{name},我很高兴您的{stuff}是...所以{name}:您的{stuff} bla bla bla bla是什么?... {stuff} ... {name}”%{ :name =>“Jesús”,:stuff =>“ pet”}。想象一下,使用列表,您必须多次重复“名称”和“材料”。现在,我希望这种优势加上能够格式化的能力。怎么样?
jgomo3 2013年

h = {:name =>'bob',:stuff => 23} sprintf(“ name =%s,value =%03d”,h [:name],h [:stuff])
史蒂夫·威廉

还是一样的问题。这样,您必须按值在模板中出现的顺序逐一列出。如何通过模板从名称中引用值,同时应用某种格式(即数字格式%02d)。
jgomo3 2013年

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.