百分比未按预期工作

时间:2013-08-16 02:25:32

标签: ruby arrays

我最近问了一个关于如何根据显示here的对象百分比将项插入数组的问题。现在答案很简单,但我尝试了,我将对象TestSubject的百分比设置为3,并使用以下命令运行:

if rand(100) <= TestSubject.percent
    arr.push(TestSubject.name)
end

但是rand为54且百分比为3,它始终有效 - 这不应该,总是工作,它应该仅插入3%的时间,同样使用,如果百分比为67,则应插入67%的时间

然而,如果百分比小于或等于TestSubject.percent,它似乎就是这样做的。

想法?

3 个答案:

答案 0 :(得分:0)

如何将rand(100)设置为rand_temp_variable,然后测试变量&lt; = TestSubject.percent? 这样你就可以调试/检查rand_temp_variable和TestSubject.percent的值,看看究竟发生了什么。

答案 1 :(得分:0)

我的猜测是你的.percent实际上是介于0和1之间的数字,如0.54,在这种情况下:

arr.push(TestSubject.name) if rand(100) < TestSubject.percent*100

[编辑]: 您可以使用以下方法测试rand方法:

20.times do
  temp = rand(100)
  puts "Random Number: #{temp} <? #{3}\t#{temp < 3}"
end

对我来说,它返回的True值非常少(正如预期的那样)

答案 2 :(得分:0)

您的代码看起来不错,但确实有效:

require 'ostruct'

test_subject = OpenStruct.new(percent: 3, name: 'foo')
arr = []

100.times do
  if rand(100) <= test_subject.percent
    arr.push(test_subject.name)
  end
end

puts arr.size

示例输出:

5
4
1
2
3
0
5
3
0
2
3

您的问题位于其他地方。