如何将float 0.0转换为0的返回字符串?

时间:2014-05-06 03:10:29

标签: ruby

我正在运行一个以0.0作为浮动返回的程序。我需要将其转换为没有小数位的字符串。我该怎么做?输入和结果的一些例子如下:

convert_number 0.0
# => "0"

convert_number 1.5
# => "1.5"

convert_number 2.0
# => "2"

我如何编码方法" convert_number"

4 个答案:

答案 0 :(得分:5)

此处不一定需要任何自定义逻辑,只需使用sprintf(通过String#%):

'%g' % 1.0  #=> "1"
'%g' % 1.1  #=> "1.1"

但请注意,大量数字会转换为科学记数法:

'%g' % 1000000.0  #=> "1e+06"

有关sprintf格式选项的更多信息,请参阅the docs

答案 1 :(得分:2)

这应该适合您将浮动整数转换为正常整数的需要:

def convert_number(n)
  n == n.to_i ? n.to_i : n
end

convert_number(0.0)
=> 0
convert_number(1.5)
=> 1.5

如果您需要对字符串进行额外转换,只需将convert_number的正文包裹在parens中并拨打to_s

def convert_number_to_s(n)
  (n == n.to_i ? n.to_i : n).to_s
end

convert_number_to_s(1.5)
=> "1.5"
convert_number_to_s(2.0)
=> "2"

答案 2 :(得分:1)

这应该有效:

def convert_number n
  (n == n.to_i) ? n.to_i.to_s : n.to_s
end

如果您需要将截断和转换分隔为字符串,则惯用法如下:

def convert_number n
  (n == n.to_i) ? n.to_i : n
end

> convert_number(3.0)
=> 3
> convert_number(3.0).to_s
=> "3"

答案 3 :(得分:0)

根据您的需要,您可以使用以下方法之一:

 > 0.0.to_i.to_s
 => "0" 

 > 0.1.ceil.to_s
 => "1" 

 > 0.1.round.to_s
 => "0"