乘法不会返回确切的结果

时间:2014-12-26 19:57:12

标签: vb.net

我正在使用两个循环,每个循环用于在表中分发数据。 除了变量" mol"我从数组的分割得到的值,因此我将它乘以NumericUpDown中包含的值。 乘法是成功的,但是当开始新的循环时,该值显然被替换。如何将值保留到内存中直到现在计算并乘以下列值?

    Dim giocata = NumericUpDown1.Value

    For Each key In combinations
        For Each combination In key
            Dim valore = combination.Split(",")
            quota = Convert.ToDouble(valore(3), New CultureInfo("en-US")) 'utile per il punto
            MessageBox.Show(quota)
                mol = quota * giocata
                MessageBox.Show(mol)
                dt.Rows(contatore).Item(valore(4)) = valore(1) & "-" & valore(2)
        Next
        dt.Rows(contatore).Item(moltiplicatore(k)) = mol
        mol = 0
        contatore = System.Threading.Interlocked.Increment(contatore)
    Next

问题示例:

mol = 3.60 * 2 = 7.20

新循环

mol = 1.90 * 2 = 3.80

但应该是:
mol = 3.60 * 2 = 7.20
新循环
mol = 1.90 * 2 * 7.20 = 27.36

1 个答案:

答案 0 :(得分:2)

在内部循环中,您始终使用当前值重新计算mol的值 因此,当您退出该循环时,mol的值始终是最后计算的值。

要解决您的问题,请根据您的示例数据,将mol的当前值乘以(quota * giocata)的值,并将mol设置为此乘法的结果

只是(在VB.NET中)

mol = mol * (quota * giocata)

但是在第一个循环中,您需要初始化值mol,否则0 * ...会产生零结果。因此,您需要添加一个if来检查是否仍然要为mol集合上的当前循环设置变量key

mol = 0
For Each combination In key
    Dim valore = combination.Split(",")
    quota = Convert.ToDouble(valore(3), New CultureInfo("en-US")) 'utile per il punto
    Dim temp = quota * giocata
    if mol = 0 Then
         mol = temp
    else
         mol = mol * temp
    End if
    dt.Rows(contatore).Item(valore(4)) = valore(1) & "-" & valore(2)
Next

另请注意,如果需要在循环外部使用该值,则需要在内循环开始时将设置移动到零,而不是在结尾移动