使用`repeated_permutation`和浮点的行为

时间:2015-12-12 03:32:41

标签: ruby floating-point permutation

我正在解决Project Euler问题33。

(10..99).to_a.repeated_permutation(2) do |ary|
  print (ary[0]/ary[1]).to_f if ary[0]/ary[1] < 1
end

只返回一系列小数位和零。但是,如果我获取数组的值并手动划分它们,例如:

print 98/99.to_f

返回正确的值。

任何人都可以解释为什么会发生这种情况,并且(更重要的是)如何规避它?

1 个答案:

答案 0 :(得分:2)

ary[0]ary[1]都将在您的块内始终为正整数。这意味着ary[0]/ary[1]将为0或某个正整数。当ary[0]/ary[1]小于1时(即当ary[0]/ary[1]不为零时),您的块不会执行任何操作。由于您只在print时拨打ary[0]/ary[1] == 0,因此您只是在说:

print 0.to_f if ary[0]/ary[1] == 0

此:

print 98/99.to_f

打印出您期望的内容,但是你不会在街区中这样做,你会说:

print (98/99).to_f

我们发现to_f来电是错误的。

你可能想说:

print ary[0]/ary[1].to_f if ary[0]/ary[1] < 1

获得浮点除法而不是整数除法。