我正在使用两个循环,每个循环用于在表中分发数据。 除了变量" 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
答案 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
另请注意,如果需要在循环外部使用该值,则需要在内循环开始时将设置移动到零,而不是在结尾移动