0

なぜ計算が間違っているのか理解できません。Railsアプリのスコアの中央値に対してユーザーがスコアを付けた時間の割合を計算しようとしています。

コントローラ

my_scores_over_median_count = 6
total_scores_over_median = 8
@my_over_median_percent = (my_scores_over_median_count / total_scores_over_median) * 100

これをコントローラーに追加すると、次のようになります。

puts my_scores_over_median_count
puts total_scores_over_median 
puts @my_over_median_percent

私は得る:

6 (correct)
8 (correct)
0 (incorrect)

誰かが私が0代わりに得ている理由を理解するのを手伝ってもらえます75か?ありがとうございました。

4

1 に答える 1

2

古典的な整数除算の問題。これに変更して、機能することを確認してください。

my_scores_over_median_count = 6.0
total_scores_over_median = 8.0
@my_over_median_percent = (my_scores_over_median_count / total_scores_over_median) * 100

Rubyは、6を「Fixnum」クラス、本質的には整数として解釈します。私たちはこれを知っています:

1.9.3-p194 :001 > 6.class
 => Fixnum 

任意の数値をFixnumで除算すると、Rubyは整数演算を実行します。つまり、余りはすべて破棄されます。それで:

1.9.3-p194 :004 > 4 / 5
 => 0 
1.9.3-p194 :005 > 4 / 3
 => 1 

Fixnumである変数があり、それをfloatに変換して浮動小数点除算を強制する場合は、.to_fメソッドを使用します。

1.9.3-p194 :007 > x = 4
 => 4 
1.9.3-p194 :008 > y = 5
 => 5 
1.9.3-p194 :009 > x / y
 => 0 
1.9.3-p194 :010 > x.to_f / y
 => 0.8 
于 2012-11-09T01:04:13.953 に答える