C#总和问题

时间:2017-08-22 17:44:30

标签: c#

我使用以下代码来获取数据网格视图中列的总和。

private void button16_Click(object sender, EventArgs e)
{
    int sum = 0;
    for (int i = 0; i < dataGridView4.Rows.Count; ++i)
    {
        sum += Convert.ToInt32(dataGridView4.Rows[i].Cells[10].Value);
    }
    try
    {
        decimal tot = 0;
        for (int i=0; i <= dataGridView4.RowCount -1; i++)
        {
            tot += Convert.ToDecimal (dataGridView4.Rows[i].Cells[10].Value);
        }
        if (tot==0) {}
        textBox34.Text = tot.ToString();
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

我收到错误消息

输入字符串的格式不正确。

我发现问题在于格式化。假设该列的SQL服务器数据类型是金钱。并且SQL服务器将我保存的任何数字更改为此格式。 00.0000 例如,如果我保存10个SQL服务器将其保存为10.0000

如果我删除(。)我没有错误。

如果我试着总计10.0000 + 3.0000它就永远不会有效。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的问题是您正在尝试将带小数点的值从字符串转换为int。在数据库中使用money数据类型时,代码中使用的最佳数据类型将是decimal类型。请参阅What is the best data type to use for money in C#

上的答案

这样做:

int val = Convert.ToInt32("10.00");

将产生以下错误(这是您收到的):

  

未处理的异常:System.FormatException:输入字符串不在   格式正确。

您可以使用Convert.ToDecimal()方法转换值:

decimal val = Convert.ToDecimal("10.00");

如果要删除值的小数部分,可以根据需要使用以下方法之一:

例如:

decimal val2 = Math.Round(val);

或者:

decimal val2 = Math.Truncate(val);

如果您只想将值作为字符串返回但没有小数部分,则可以执行以下操作:

decimal val = Convert.ToDecimal("10.00");
Console.WriteLine(val.ToString("0.#"));

编辑:

所以在你的代码中,改变:

int sum = 0;

for (int i = 0; i < dataGridView4.Rows.Count; ++i)
{
    sum += Convert.ToInt32(dataGridView4.Rows[i].Cells[10].Value);
}

有关:

decimal sum = 0;

for (int i = 0; i < dataGridView4.Rows.Count; ++i)
{
    sum += Convert.ToDecimal(dataGridView4.Rows[i].Cells[10].Value);
}