2012-11-07 226 views
0

我正在玩弄Ruby和Latex來爲一個registor創建一個顏色編碼集。我有以下代碼塊。當試圖運行此,band1 = 1e+02.for循環的迭代次數計算

我試圖band1 = (BigDecimal(i) * 100).to_f,想可能有一些奇怪的浮點運算問題。整數乘以整數應該創建一個整數。我嘗試了各種其他的東西,但無濟於事。

(1..9).each do |i|  #Band 1 
    (0..9).each do |j|  #Band 2 
    (0..11).each do |k| #Band 3 
     #Band 3 Start 
     #these are the colors of the resistor bands 
     b1 = $c_band12[i] 
     b2 = $c_band12[j] 
     b3 = $c_band3[k] 
     b4 = "Gold" 

     oms = ((i*100) + (j*10)) * $mult[k] 
     band1 = i*100 
     band2 = j 
     band3 = $mult[k] 
    end 
    end 
end 

不知道我錯過了什麼。我應該在這些迭代中使用each_with_index嗎?我試過這個:

(1..9).each_with_index {|i, indexi|  #Band 1 
    (0..9).each_with_index {|j, indexj|  #Band 2 
    (0..11).each_with_index {|k, indexk| #Band 3 
     #Band 3 Start 
     #these are the colors of the resistor bands 
     b1 = $c_band12[i] 
     b2 = $c_band12[j] 
     b3 = $c_band3[k] 
     b4 = "Gold" 

     oms = ((i*100) + (j*10)) * $mult[k] 
     band1 = indexk * 100 

我得到了同樣的答案。我不明白爲什麼1*100應該等同於這麼大的數字。

編輯:附加信息:如果我有:band1=i*10 那麼計算是正確的。實際上,計算正確率最高爲99.

回答

0

在您的代碼中,band1必須是Fixnum。請與p band1.class聯繫。不知道你如何得到「1e + 02」,也許你以某種奇怪的方式打印,或者你做band1 == 1e+02,它在Ruby中返回true。您必須使用eql?區分11.0之間:是的,多重峯確實有浮點值

1 == 1.0 # => true 
1.eql?(1.0) # => false 
+0

。但是,我的值是一個整數(無小數),並且乘以100並不能達到我的預期。 我期望1 * 100等於100,我收到1 * 100 = 1e + 02(第一次迭代) – user1805035

+0

Oups,誤讀您的問題。下次保持嚴格的最低限度;它也會幫助你更好地理解。 –

+0

沒有問題 - 是的,我看到band1應該是Fixnum(不能完全記住爲什麼,我相信變量賦值並不重要)。 不知道我怎麼得到這個值。可能LaTeX正在轉錄它。 – user1805035