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 变量,并且您想将其转换为浮点数以强制进行浮点除法,请使用 .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 回答