我正在解决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
返回正确的值。
任何人都可以解释为什么会发生这种情况,并且(更重要的是)如何规避它?
答案 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
获得浮点除法而不是整数除法。