dポイントプレゼントキャンペーン実施中!

csvファイルから、特定の条件を持つ行を抽出したいです。

a1, b1, c1, d1, e1
a2, b2, c2, d2, e2
a3, b3 ,c3, d3, e3
:   :   :   :  :
an, bn, cn, dn, en

とあったときに d-c/d+c > 0.5となる行だけを出力したいのですが

file.each{|line|
x = line.split(",").map{|i|i.to_i}
if 0.5<(x[3]-x[2])/(x[3]+x[2])
p x
end
}

と自分でやってみたものの、出来ませんでした。
どうしたらよいのでしょうか。

A 回答 (2件)

通常はto_fでしょう。


mapのto_i→to_fに変更でもいいし、

0.5<(x[3].to_f-x[2].to_f)/(x[3].to_f+x[2].to_f)
と使うところで変更してもいい。

あるいは、(x[3]+x[2])<2*(x[3]-x[2]) と式を変形するとかでもいいです。

とにかく、整数同士の演算は整数になるので、小数になならない、と覚えてください
    • good
    • 0

なにが上手くいってないのか、がわかりません



整数 / 整数 は整数になるので、 (x[3]-x[2])/(x[3]+x[2]) = 0.8とかだと、0になります。
あと、(x[3]+x[2])が0になることはありませんか?
    • good
    • 0
この回答へのお礼

実は計算の結果がすべて∓1.0、少数となるものでした。
これでは結果は出力されませんよね。

ということはto_fとすればよいのでしょうか。

バカな質問に答えていただいてありがとうございます。

お礼日時:2012/12/17 20:54

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