2012-11-07 176 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