えぐち@エスアンドイー です。 >>> In message [ruby-list:15004] 文字列から数値への変換失敗を検出したい On Mon, 14 Jun 1999 16:21:39 +0900, gotoken / math.sci.hokudai.ac.jp (GOTO Kentaro) said: gotoken> ごとけんです gotoken> gotoken> In message "[ruby-list:15003] 文字列から数値への変換失敗を検出したい" gotoken> on 99/06/14, ARIMA Yasuhiro <fit0298 / fitec.co.jp> writes: gotoken> gotoken> >文字列が数値に変換可能かどうかを判断するために、文字列から数値への gotoken> >変換失敗を検出したいと思ったのですが、to_i, to_f では、0 にして gotoken> >しまうようです。どうするべきでしょうか? gotoken> gotoken> これって結構不便ですよね。 gotoken> gotoken> >失敗した時に例外を上げるような to_i, to_f があるとよいのですが。 gotoken> gotoken> 僕もこういうのほしいです。 同感です。 はじめの頃、 「nil か false を返してくれるといいなぁ」 と思っていましたが、例外を返すのがモダンですね。 gotoken> しかし、 to_f の方は strtod() を使ってるようだし例外にするの gotoken> は面倒そうですね。いちおう、strtod()の第2引数をNULL以外にす gotoken> ればできなくはなさそうですが。 『strtod()の第2引数』とあり、考えたですけど、 「変換された数値」 と 「変換対象にならなかった残りの部分文字列」 の対を Array で返してくれるメソッドがあると、 ちょっと便利かなと思います。 gotoken> とりあえずユーザーレベルでできそうなのは、0をあらわすリテラ gotoken> ルを正規表現をこさえて、0が返されたときにそれとマッチするか gotoken> 調べるくらいかなぁ。 Ruby の零を表す文字リテラルの正規表現って結構むづかしいですね ちょっと考えただけで、下のようなケースに対応しないといけない。 o +/-や空白が先行する場合 o 基数が 2,8,10,16 のそれぞれの場合 o '_' を任意の位置に詰めものとして入れられる あと、to_f は小数点と指数も扱いますね ^^;;; えぐち