将字符串转换为Float或Fixnum



给定用户输入的字符串,如果该字符串是有效的int,我希望将其转换为FixnumInteger。如果该字符串为浮点值,我不希望转换为int。如果失败,我想尝试将字符串转换为Float。如果字符串不是这两者中的任何一个,我只想引发一个异常。

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

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

irb(main):092:0> "1.4".to_i
=> 1
irb(main):093:0> "1.4e5".to_i
=> 1
def int_then_float string
  Integer(string)
rescue ArgumentError
  Float(string)
end

我的解决方案

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

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

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

.to_f或.to_f根据定义永远不会引发错误,如果它们不能转换字符串,则返回0。可以使用"Integer"one_answers"Float"类。

如果第一个可以转换为整数,则此方法返回错误引发或浮点数

def validate_number(string)
   begin
    Integer(string)
    Float(string)
   rescue => e
    e
   end
end 

最新更新