我有:
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
我怎样才能让退货在一行上,并且顺序正确?
你的方法应该返回值(隐式 - 作为最后一个计算的表达式,或显式 - 带有return
),而不是输出它,以便之后可以在字符串中插值:
def two_decimals number
sprintf '%0.2f', number
end
演示
以下是您的代码正在执行的操作:
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 在退出
two_decimals
时返回puts
的结果,导致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"
我建议使用以下代码:
def two_decimals(number)
number.round(2)
end
puts "The total dollar amount of TVs sold today was #{two_decimals(tv_sales)}."
您需要返回一个数字,而不是输出方法,以便可以将其转换为字符串。