将字符串转换为Float或Fixnum

时间:2013-07-09 17:14:54

标签: ruby

给定来自用户输入的字符串,如果字符串是有效的int,我想将其转换为FixnumInteger。如果字符串是float,我不想转换为int。如果失败,我想尝试将字符串转换为Float。如果字符串不是其中任何一个,我打算只引发异常。

似乎String#to_i只截断任何Float值,而不是提供任何类型的错误。我知道我可以做一些regexing以确定String是否是一个有效的int,但是如果String有其他任何数字,似乎应该有一些内置转换失败。我错过了什么吗?

例如。我想要这样的东西失败而不是返回1

irb(main):092:0> "1.4".to_i
=> 1
irb(main):093:0> "1.4e5".to_i
=> 1

4 个答案:

答案 0 :(得分:7)

def int_then_float string
  Integer(string)
rescue ArgumentError
  Float(string)
end

答案 1 :(得分:1)

我的解决方案

def typing(value)
  if value.to_i.to_s == value
    value.to_i
  elsif value.to_f.to_s == value
    value.to_f
  else
    value
  end
end

答案 2 :(得分:0)

我不喜欢救援,所以这是我的版本:)。

def to_fi(str)
  if str.to_i == str.to_f
    str.to_i
  else
    str.to_f
  end
end

a = "1"
to_fi a
#=> 1

a = "1.0"
to_fi a
#=> 1

a = "1.2"
to_fi a
#=> 1.2

答案 3 :(得分:-1)

根据定义,

.to_f或.to_f永远不会引发错误,如果他们无法转换字符串返回0。 您可以使用Integer和Float。

如果首先可以转换为整数

,则此方法返回引发的错误或浮点数
def validate_number(string)
   begin
    Integer(string)
    Float(string)
   rescue => e
    e
   end
end