Member 12674660 Ответов: 2

Входная строка не была в правильном формате при умножении значений


получить входную строку было неправильно при преобразовании текста метки в целое число и умножении...

Что я уже пробовал:

private void GrandTotal()
    {
        int GTotal = 0;
        for (int i = 0; i < BillingGridView.Rows.Count; i++)
        {
            String total = (BillingGridView.Rows[i].Cells[7].Text);
            GTotal += Convert.ToInt32(total.ToString());
        }
        BillTotalLabel.Text = GTotal.ToString();
        if (BillTotalLabel.Text != "")
        {
            int billtotal = Convert.ToInt32(BillTotalLabel.Text);
            int vat = Convert.ToInt32(VATPerLabel.Text.ToString());
            int totalaftervat = billtotal * vat/100;
            VATValueLabel.Text = totalaftervat.ToString();
        }
    }

[no name]

"get input string was not in correct for", вот позвольте мне закончить это за вас. "get input string was not in correct format". И это означает именно то, что он говорит. Какой бы текст ни был в этой метке, он не может быть преобразован в int.

Ramesh Kumar Barik

Проверьте, на какой строке возникла проблема.
Похоже, что значение, которое вы хотите преобразовать в целое число, находится не в целочисленном формате.

2 Ответов

Рейтинг:
1

Badal Kumar

Place proper trim if space or some character is coming.


Рейтинг:
0

CHill60

@NotPoliticallyCorrect указал вам правильное направление - содержимое одного из текстовых полей не является целым числом.

Проблема с использованием Convert.ToInt32 это означает, что он, как вы обнаружили, вызовет исключение, если строка не является целым числом. Например, "1 "будет в порядке," 12345 "будет в порядке, но и" $35", и" 14,6 " вызовут сбой, который вы наблюдали.

Лучшим решением является использование одного из целых чисел разбор методы-см. Как преобразовать строку в число (руководство по программированию на C# )[^]

Есть и другие проблемы с вашим кодом ...

string total = (BillingGridView.Rows[i].Cells[7].Text);
бросает ошибку компиляции для меня, это, вероятно, должно быть
String total = (BillingGridView.Rows[i].Cells[7].Value.ToString());

Линия
int vat = Convert.ToInt32(VATPerLabel.Text.ToString());
есть ненужный .ToString() позвоните в него ... VATPerLabel.Text это уже струна! Аналогично
GTotal += Convert.ToInt32(total.ToString());
не нуждается в .ToString() как вы уже заявили total как String.

Линия
int billtotal = Convert.ToInt32(BillTotalLabel.Text);
имеет в себе ненужное преобразование ... вы только что установили метку BillTotalLabel.Текст должен быть GTotal.ToString();так что эта линия должна быть
int billtotal = GTotal;

Так что у вас должно быть что-то вроде этого (обратите внимание, что я этого не тестировал)
private void GrandTotal()
{
    int GTotal = 0;
    int res;
    for (int i = 0; i < BillingGridView.Rows.Count; i++)
    {
        String total = (BillingGridView.Rows[i].Cells[7].Value.ToString());
        if(int.TryParse(total, out res))
            GTotal += Convert.ToInt32(total);
    }
    BillTotalLabel.Text = GTotal.ToString();
    VATValueLabel.Text = "";
    if (String.IsNullOrWhiteSpace(BillTotalLabel.Text))
        return;

    int billtotal = GTotal;
    int vat;
    if (int.TryParse(VATPerLabel.Text, out vat))
    {
        int totalaftervat = billtotal*vat/100;
        VATValueLabel.Text = totalaftervat.ToString();
    }
}
Я оставлю вам один последний комментарий - Я не думаю, что вы хотите использовать int для некоторых из этих переменных-десятичная или двойная может быть более подходящей


Karthik_Mahalingam

5