有馬@FITECです。 WATANABE Tetsuya <tetsu / jpn.hp.com> wrote "[ruby-list:15008] Re: 文字列から数値への変換失敗を検出したい" | 渡辺哲也です。 | この辺の仕様は、Perl からきていると思います。 | のように、「解釈できるところまで」となっています。 | 最初にアルファベットなど数字以外がきてしまうと 0 | を返します。 | | これは、C の atoi(3) の仕様からきているような気も | しますが... atoi(), atol(), atof() に由来するエラーを検出しないメソッドに対して、 stotol(), strtod() に由来するエラーを検出するメソッドがほしいところですよね。 | 私はたぶん /^\d/ で数字が最初にくるか比較してから | 先に進める? ような形を書きそうです。 かなり詰めがあまいですが、手元の需要を満たす程度のメソッドを書いてみました。 class String def to_float return to_f if self =~ /^[-+]?((\d+)?(\.\d+))|((\d+)(\.\d+)?)([eE][-+]\d+)?$/ raise "fail at convert string to float" end def to_int return to_i if self =~ /^[-+]?(\d+)$/ raise "fail at convert string to int" end end def c x begin x.to_s.to_float begin x.to_s.to_int t = "int" rescue t = "float" end rescue t = "string" end end def checkall ar ar.each do |x| t = c(x) print t, " ", x, "\n" end end ar = [] ar << "abc" ar << "123" ar << "1.23" ar << "1.23e+4" ar << ".123" ar << "1e2" checkall ar -- 有馬 康弘 <fit0298 / fitec.co.jp>