プロが教えるわが家の防犯対策術!

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は数字として比較するにはどうしたらよいのでしょうか?

どなたか宜しくお願いします。

A 回答 (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 

のようにすればよいかと。
    • good
    • 0
この回答へのお礼

ありがとうございます!!
出来ました!

Perlメインでプログラムを書く事が多かったので、sakusaker7さんのおっしゃるとうり自動変換を無意識のうちに期待していたようです。

こんな基礎的な事で申し訳ありません。

お礼日時:2007/10/25 03:17

bbb[2] が String だから怒られてるんじゃない?



bbb[2].to_f < 1.301029996

でもダメですか?
    • good
    • 0
この回答へのお礼

ありがとうございます!!
出来ました!!

こんな基礎的な事で申し分けませんでした。

お礼日時:2007/10/25 03:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!