• ベストアンサー

Rubyでの比較 (Float)

Ruby初心者です。 簡単な比較を行いたいんですが、エラーが出てしまいます。 ファイルに ex. ruby_test.rb 0 12.3243 32 112.233 0.33123 とあり、このファイルを読み込んで比較しようとしています。 以下のコードで比較しようとしました。 ----------------------------------------------------------- fp = open("c:/ruby_test.txt") aaa = Array.new while line2 = fp.gets line2.chomp! bbb = line2.split(/\t/) aaa << bbb[1] if ( bbb[2] < 1.301029996 ) then       ※11行目 print "aaa\n" elsif ( bbb[2] < 8.164943898 ) then print "bbb\n" elsif ( bbb[2] >= 8.164943898 ) then print "ccc\n" end end fp.close -------------------------------------------- 実行すると ( ※ **** はファイル名 ) C:/ruby/*******.rb:11:in'<': comparison of String with Float failed (Argument Error) というエラーが出ます。 比較する  bbb[2] < 1.301029996  を bbb[2] < "1.301029996" すれば 動きますが、これでは文字列としての比較になってしまいますよね?? Floatは数字として比較するにはどうしたらよいのでしょうか? どなたか宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

>C:/ruby/*******.rb:11:in'<': comparison of String with Float failed (Argument Error) これで何を云わんとしているかというと、 ファイルから読み出してきた文字列を元に作られた文字列である bbb[2] と、数値である1.301029996 とを '<' を使って比較することができない ということです。 Perlのように、このようなときに文字列→数値とか数値→文字列の 自動的な変換をRubyはしませんので、スクリプトを書く人が自分で書いてやらなければいけません。 if ( bbb[2].to_f < 1.301029996 ) then  のようにすればよいかと。

nika_
質問者

お礼

ありがとうございます!! 出来ました! Perlメインでプログラムを書く事が多かったので、sakusaker7さんのおっしゃるとうり自動変換を無意識のうちに期待していたようです。 こんな基礎的な事で申し訳ありません。

その他の回答 (1)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

bbb[2] が String だから怒られてるんじゃない? bbb[2].to_f < 1.301029996 でもダメですか?

nika_
質問者

お礼

ありがとうございます!! 出来ました!! こんな基礎的な事で申し分けませんでした。

関連するQ&A