2014-05-06 49 views
0

我正在运行程序,返回0.0作为一个浮点数。我需要将它转换为没有小数位的字符串。我应该怎么做?是的投入和成果的一些例子如下:如何将float 0.0转换为0的返回字符串?

convert_number 0.0 
# => "0" 

convert_number 1.5 
# => "1.5" 

convert_number 2.0 
# => "2" 

如何将我的代码方法“convert_number”

+1

你目前的代码是什么?你有什么尝试? –

+0

基本上,我正在做分工,为了不失去任何精度,我将数字除以6.0。乘法运行正常,但问题是如果结果是一个整数,我得到第一个小数位为0,但我希望它自动转换回整数。 –

+0

可能重复[如何在Ruby中使用#{variable}格式化浮动字符串?](http://stackoverflow.com/questions/12389567/how-to-format-a-string-with-floats-in- ruby使用变量) –

回答

1

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

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身体括号,并呼吁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" 
0

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

> 0.0.to_i.to_s 
=> "0" 

> 0.1.ceil.to_s 
=> "1" 

> 0.1.round.to_s 
=> "0" 
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" 
5

不一定,只要使用sprintf(通过String#%):

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

但是请注意,大量地转化为科学记数法:

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

更多关于sprintf的格式选项见the docs

+0

+1 ..对我而言..没有得到'%f'和'%g'之间的区别...... :( –

+0

不是一个糟糕的替代解决方案,除非指数表示法不适合OP的需求这种情况只适用于较小的数字。 –

相关问题