Сумма текстовых полей оператора C # - PullRequest
4 голосов
/ 14 февраля 2011

Я пытаюсь суммировать значения из 3 текстовых полей с помощью следующего утверждения, однако я не могу заставить его работать.В 3 текстовых полях значения отображаются десятичными.Ошибка: в mscorlib.dll возникло необработанное исключение типа «System.FormatException». Дополнительная информация: Входная строка была неверного формата.

        decimal num1, num2, num3, total;
        num1 = Convert.ToDecimal(SSubTotalTextBox.Text);
        num2 = Convert.ToDecimal(SubTotalMTextBox.Text);
        num3 = Convert.ToDecimal(SubTotalTextBox3.Text);
        total = num1 + num2 + num3;
        TotalAmountTextBox.Text = Convert.ToString(total);

Ответы [ 4 ]

3 голосов
/ 14 февраля 2011

В вопросе недостаточно подробностей, но мое внутреннее чувство подсказывает мне, что это проблема:

У вас есть содержимое в текстовом поле, например 40,5 , но компьютеры текущиекультура имеет десятичный разделитель, установленный на . (точка) .Следовательно, вы получаете исключение при преобразовании 40,5 в десятичное число, поскольку оно не понимает:

Может быть наоборот, и вы пишете 40,5, но ожидаете получить 40,5.

РЕДАКТИРОВАТЬ

Я видел комментарий к ответу Флориан фон Спичак , и кажется, что в текстовых полях присутствует символ $.Если это так, то это, очевидно, проблема.

Попробуйте заменить все textBox.Text внутри вызовов Convert.ToDecimal на textBox.Text.Replace("$","").Это должно избавить от $ и заставить его правильно проанализировать.

Таким образом, полный код должен быть таким:

decimal num1, num2, num3, total;
num1 = Convert.ToDecimal(SSubTotalTextBox.Text.Replace("$",""));
num2 = Convert.ToDecimal(SubTotalMTextBox.Text.Replace("$",""));
num3 = Convert.ToDecimal(SubTotalTextBox3.Text.Replace("$",""));
total = num1 + num2 + num3;
TotalAmountTextBox.Text = "$ "+ total;

Кроме того, вы должны заменить Convert.ToDecimal на decimal.Parse или decimal.TryParse и добавьте некоторую логику проверки того, что на самом деле написано в ваших текстовых полях.

2 голосов
/ 14 февраля 2011

лучший способ - использовать метод decimal.TryParse (), тогда вы можете выполнить некоторые проверки. MSDN: Десятичный.Примерный метод (строка, десятичное число)

2 голосов
/ 14 февраля 2011

Вместо Convert.ToDecimal try:

 decimal dec1;
 if (!Decimal.TryParse(SSubTotalTextBox.Text, dec1)
 {
    MessageBox.Show("Error trying to convert to a decimal: " + SSubTotalTextBox.Text);
 }

Это должно помочь вам выяснить, что не так с вводом текстовых полей.

0 голосов
/ 14 февраля 2011

Вы вводили значения во все текстовые поля? Преобразование может не понравиться пустые строки. Вы также можете попробовать decimal.Parse или decimal.TryParse вместо Convert.

Ред .: Я не думаю, что культура - это проблема. Даже если он введен с 6,4, и культура ожидает 6,4, обычно интерпретируется как тысяча разделителей и приводит к 64 вместо 6,4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...