如何在 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!");
    }
}