如何在 2 个列表框之间相乘并输出到另一个列表框
How do you multiply between 2 listboxes and output to another listbox
我需要将折扣和金额相乘并将结果输出到折扣价中,折扣每次都会有所不同
` private void Discount_click(object sender, EventArgs e)
{
Button d = (Button)sender;
txtPre.Text = d.Text;
//Discount Spliitter
var dis = txtPre.Text;
char diseperate = '%';
string[] displit = null;
displit = dis.Split('%');
string disarea = displit[0];
lbDiscount.Items.Add("0." + disarea);
//Discount Adder
if (lbDiscount.Items.Count == lbAmount.Items.Count)
{
string strDiscount, strAmount;
decimal discount, amount, price;
decimal sum = 0;
lbDiscPrice.Items.Clear() ;
for (int i = 0; i < lbDiscount.Items.Count; i++)
{
strDiscount = lbDiscount.Items[i].ToString();
strAmount = lbAmount.Items[i].ToString();
if (decimal.TryParse(strDiscount, out discount))
{
if (decimal.TryParse(strAmount, out amount))
{
price = amount - (discount * amount);
lbDiscPrice.Items.Add(price);
sum += price;
}
else
{
MessageBox.Show("Invalid amount: " + strAmount);
}
}
else
{
MessageBox.Show("Invalid discount: " + strDiscount);
}
}
lblSub.Text = sum.ToString();
}
else
{
MessageBox.Show("Number of items does not match between Discount and Amount!");
}
}`
这是我现在拥有的,但它似乎不起作用。
这些是带有数据的列表框的样子,我需要将第 3 个和第 4 个框相乘并将结果输出到最右边的列表框。折扣采用小数形式,会有所不同
您的代码无效,因为:
- 指定的乘法没有实现
- 您的第一个循环与第二个循环分离。它甚至不会将结果存储在任何地方,所以基本上什么都不做。
有多种方法可以解决此问题。我的偏好是完全避免循环并使用 LINQ,如下所示:
lblSub.Text =
lbDiscount.Items.Zip(lbAmount.Items, (discount, amount) =>
Convert.ToDecimal(discount) * Convert.ToDecimal(amount))
.Sum()
.ToString();
如果你想用老式的方式来做,它看起来像:
private void button1_Click(object sender, EventArgs e)
{
if (lbDiscount.Items.Count == lbAmount.Items.Count)
{
string strDiscount, strAmount;
decimal discount, amount, price;
decimal sum = 0;
lbDiscPrice.Items.Clear();
for(int i=0; i<lbDiscount.Items.Count; i++)
{
strDiscount = lbDiscount.Items[i].ToString();
strAmount = lbAmount.Items[i].ToString();
if (decimal.TryParse(strDiscount, out discount))
{
if (decimal.TryParse(strAmount, out amount))
{
price = amount - (discount * amount);
lbDiscPrice.Items.Add(price);
sum += price;
}
else
{
MessageBox.Show("Invalid amount: " + strAmount);
}
}
else
{
MessageBox.Show("Invalid discount: " + strDiscount);
}
}
lblSub.Text = sum.ToString();
}
else
{
MessageBox.Show("Number of items does not match between Discount and Amount!");
}
}
我需要将折扣和金额相乘并将结果输出到折扣价中,折扣每次都会有所不同
` private void Discount_click(object sender, EventArgs e)
{
Button d = (Button)sender;
txtPre.Text = d.Text;
//Discount Spliitter
var dis = txtPre.Text;
char diseperate = '%';
string[] displit = null;
displit = dis.Split('%');
string disarea = displit[0];
lbDiscount.Items.Add("0." + disarea);
//Discount Adder
if (lbDiscount.Items.Count == lbAmount.Items.Count)
{
string strDiscount, strAmount;
decimal discount, amount, price;
decimal sum = 0;
lbDiscPrice.Items.Clear() ;
for (int i = 0; i < lbDiscount.Items.Count; i++)
{
strDiscount = lbDiscount.Items[i].ToString();
strAmount = lbAmount.Items[i].ToString();
if (decimal.TryParse(strDiscount, out discount))
{
if (decimal.TryParse(strAmount, out amount))
{
price = amount - (discount * amount);
lbDiscPrice.Items.Add(price);
sum += price;
}
else
{
MessageBox.Show("Invalid amount: " + strAmount);
}
}
else
{
MessageBox.Show("Invalid discount: " + strDiscount);
}
}
lblSub.Text = sum.ToString();
}
else
{
MessageBox.Show("Number of items does not match between Discount and Amount!");
}
}`
这是我现在拥有的,但它似乎不起作用。
这些是带有数据的列表框的样子,我需要将第 3 个和第 4 个框相乘并将结果输出到最右边的列表框。折扣采用小数形式,会有所不同
您的代码无效,因为:
- 指定的乘法没有实现
- 您的第一个循环与第二个循环分离。它甚至不会将结果存储在任何地方,所以基本上什么都不做。
有多种方法可以解决此问题。我的偏好是完全避免循环并使用 LINQ,如下所示:
lblSub.Text =
lbDiscount.Items.Zip(lbAmount.Items, (discount, amount) =>
Convert.ToDecimal(discount) * Convert.ToDecimal(amount))
.Sum()
.ToString();
如果你想用老式的方式来做,它看起来像:
private void button1_Click(object sender, EventArgs e)
{
if (lbDiscount.Items.Count == lbAmount.Items.Count)
{
string strDiscount, strAmount;
decimal discount, amount, price;
decimal sum = 0;
lbDiscPrice.Items.Clear();
for(int i=0; i<lbDiscount.Items.Count; i++)
{
strDiscount = lbDiscount.Items[i].ToString();
strAmount = lbAmount.Items[i].ToString();
if (decimal.TryParse(strDiscount, out discount))
{
if (decimal.TryParse(strAmount, out amount))
{
price = amount - (discount * amount);
lbDiscPrice.Items.Add(price);
sum += price;
}
else
{
MessageBox.Show("Invalid amount: " + strAmount);
}
}
else
{
MessageBox.Show("Invalid discount: " + strDiscount);
}
}
lblSub.Text = sum.ToString();
}
else
{
MessageBox.Show("Number of items does not match between Discount and Amount!");
}
}