Cle*_*mer 3 ruby floating-point boolean
我试图捕捉数字字符串与任意字符串之间的区别:
'0'.to_f
#=> 0.0
'hello'.to_f
#=> 0.0
以上两者都归来了Float.如果用户输入实际值'0'或用户输入值,我如何捕捉差异'hello'?
我正在尝试创建一个简单的Celsius到华氏温度计算器.如果用户输入"hello"程序应输出,Please type in a number:但如果用户键入,0则程序应输出正确的华氏度计算.
用这个:
number = Float( string_to_convert ) rescue nil
if number.nil? 
  puts "#{string_to_convert} is not a number"
else
  # DO the conversion
end
这将使用一组合理的规则将String值转换为Floats,支持负数,科学记数法,同时不要求您编写正则表达式来尝试捕获在Ruby中表达浮点数的所有有效方法.
将rescue需要从失败的转换捕获的错误.
可能更好的Ruby代码用于您的特定目的(并将Tamer的答案与Stefan的评论中的反馈结合起来):
begin
  number = Float( string_to_convert )
rescue ArgumentError
  puts "'#{string_to_convert}' is not a number"
else
  # Do the conversion, using number variable
end
但是,如果程序流程比输入或破坏然后重复更复杂,我仍然发现单行代码可能很有用 - 前提是您要么稍后提出错误,要么可以处理缺失值,因为转换为浮动失败了.