我正在运行一个以0.0
作为浮动返回的程序。我需要将其转换为没有小数位的字符串。我该怎么做?输入和结果的一些例子如下:
convert_number 0.0
# => "0"
convert_number 1.5
# => "1.5"
convert_number 2.0
# => "2"
我如何编码方法" convert_number"
答案 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"