为什么我的输出会累计我的十进制数?我应该使用十进制还是别的?

时间:2017-02-05 02:57:54

标签: c# wpf floating-point double decimal

C#Amateur here;

我正在创建一个基本的'引用计算器',ItemQuantity * ItemCost。 我希望数量是整数(1,2,3,4,5等),成本可以是整数或有小数位(1,2,3.45,6.2)。

我的WPF应用程序中的一切正常,但是,我用来输出itemQuantity * itemCost之和的TextBlock显示一个舍入的整数。

显然,我希望它精确到两位小数,但目前它将数字四舍五入。我做错了什么?

List<Items> quoteList = new List<Items>();

 public void button_itemadd_Click(object sender, RoutedEventArgs e)
    {
        quoteList.Add(new Items()
        {
            itemName = input_itemdesc.Text,
            itemQuantity = Convert.ToInt32(input_itemquantity.Text),
            itemCost = Convert.ToDecimal(input_itemcost.Text)

        });

        dataGridView1.ItemsSource = "";
        dataGridView1.ItemsSource = quoteList;
        updateQuote();
    }

    public void updateQuote()
    {
        decimal costTotal = 0;

            for (int i = 0; i < quoteList.Count; i++)
        {
            costTotal += (Convert.ToInt32(quoteList[i].itemCost) * Convert.ToDecimal(quoteList[i].itemQuantity));
        }
// output_quotecost is the TextBlock
        output_quotecost.Text = costTotal.ToString();
    }
}


class Items
{
    public string itemName { get; set; }
    public int itemQuantity { get; set; }
    public decimal itemCost { get; set; }
}

Image of Program running

1 个答案:

答案 0 :(得分:2)

看起来你混淆了Convert方法:

costTotal += (Convert.ToInt32(quoteList[i].itemCost) *
              Convert.ToDecimal(quoteList[i].itemQuantity));

相反,它应该是:

costTotal += (Convert.ToDecimal(quoteList[i].itemCost) *
              Convert.ToInt32(quoteList[i].itemQuantity));

您必须将.ToInt32替换为.ToDeciaml才能获得正确的输出。