2015-12-12 25 views
0

我解決項目歐拉問題33.行爲與`repeated_permutation`和浮動點

(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 

返回正確的值。

任何人都可以解釋爲什麼發生這種情況,以及(更重要的是)如何規避它?

回答

2

ary[0]ary[1]將始終是塊內的正整數。這意味着ary[0]/ary[1]將是0或某個正整數。當ary[0]/ary[1]小於1時(即ary[0]/ary[1]不爲零),您的塊不會執行任何操作。既然你只調用printary[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 

得到浮點除法,而不是整數除法。