- ベストアンサー
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は数字として比較するにはどうしたらよいのでしょうか? どなたか宜しくお願いします。
- みんなの回答 (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 のようにすればよいかと。
その他の回答 (1)
- koko_u_
- ベストアンサー率18% (459/2509)
bbb[2] が String だから怒られてるんじゃない? bbb[2].to_f < 1.301029996 でもダメですか?
お礼
ありがとうございます!! 出来ました!! こんな基礎的な事で申し分けませんでした。
お礼
ありがとうございます!! 出来ました! Perlメインでプログラムを書く事が多かったので、sakusaker7さんのおっしゃるとうり自動変換を無意識のうちに期待していたようです。 こんな基礎的な事で申し訳ありません。