返回包含方法计算内容的字符串

时间:2016-02-01 23:16:52

标签: ruby

我有:

tv_sales = 601.5

使用此值,我想返回以下字符串:

"The total dollar amount of TVs sold today was 601.50."

这是我的代码:

def two_decimals(number) 
  puts sprintf('%0.2f', number)
end

puts "The total dollar amount of TVs sold today was #{two_decimals(tv_sales).to_s}."
#=> 601.50
#=> The total dollar amount of TVs sold today was

如何以正确的顺序将返回返回到一行?

3 个答案:

答案 0 :(得分:1)

你的方法应该返回值(隐式 - 作为最后一次计算的表达式,或显式地 - 用return),而不是输出它,所以它可以在你的字符串中插入:

def two_decimals number
  sprintf '%0.2f', number
end

Demo

答案 1 :(得分:0)

我建议使用以下代码:

def two_decimals(number)
  number.round(2)
end

puts "The total dollar amount of TVs sold today was #{two_decimals(tv_sales)}."

您需要返回一个数字,而不是输出方法,以便将其转换为字符串。

答案 2 :(得分:0)

这是您的代码正在做的事情:

def two_decimals(number) 
  puts sprintf('%0.2f', number)  # => nil
end

tv_sales = 601.5                                                                          
puts "The total dollar amount of TVs sold today was #{two_decimals(tv_sales).to_s}."  # => nil

# >> 601.50
# >> The total dollar amount of TVs sold today was .
  • 第一个puts输出sprintf('%0.2f', number)的结果,即601.50,首先显示在输出中。
  • 然后,当Ruby退出puts时,Ruby会返回two_decimals的结果,从而生成nil
  • 该值正在插入包含two_decimals调用的字符串中,从而生成The total dollar amount of TVs sold today was .

通过删除第一个puts

来解决此问题
def two_decimals(number) 
  sprintf('%0.2f', number)  # => "601.50"
end

tv_sales = 601.5
puts "The total dollar amount of TVs sold today was #{two_decimals(tv_sales).to_s}."  # => nil

# >> The total dollar amount of TVs sold today was 601.50.

Ruby将601.50视为sprintf的返回值并返回它,它将根据需要插入到字符串中。

没有必要在字符串中使用to_s,当您插入字符串时,它会自动由Ruby提供:

"#{two_decimals(tv_sales).to_s}"  # => "601.50"
"#{two_decimals(tv_sales)}"       # => "601.50"