0

ユーザー入力からの文字列を指定して、文字列が有効な int の場合は、Fixnumまたはに変換したいと思います。Integer文字列が float の場合、int に変換したくありません。それが失敗した場合は、文字列をFloat. 文字列がこれらのいずれでもない場合は、例外を発生させるつもりです。

あらゆる種類のエラーを提供するのではなく、値String#to_iを切り捨てるだけのようです。Floata が有効な int かどうかを判断するために正規表現を実行できることはわかっていますが、aに数字以外のものが含まれてStringいる場合に失敗する組み込みの変換が必要なようです。String何か不足していますか?

例えば。戻る代わりに失敗するこのようなものが欲しい1

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

4 に答える 4

7
def int_then_float string
  Integer(string)
rescue ArgumentError
  Float(string)
end
于 2013-07-09T17:19:32.967 に答える
2

私の解決策

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
于 2016-11-01T09:08:36.307 に答える
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
于 2013-07-09T17:49:18.427 に答える
-1

定義により、.to_f または .to_f はエラーを発生させず、文字列を変換できない場合は 0 を返します。クラス Integer および Float を使用できます。

このメソッドは、最初に整数に変換できる場合、発生したエラーまたは浮動小数点数を返します

def validate_number(string)
   begin
    Integer(string)
    Float(string)
   rescue => e
    e
   end
end 
于 2013-07-09T17:32:15.003 に答える