входная строка не в правильном формате - PullRequest
0 голосов
/ 25 января 2010

Я хочу рассчитать процент. Но компилятор выдает ошибку, что входная строка имеет неправильный формат. Кто-нибудь может уточнить, что мне здесь не хватает?

private double per()
{
  double a = Convert.ToDouble(tbEnglish.Text+tbUrdu.Text+tbPhysics.Text+tbChemistry.Text+tbMaths.Text);
  double d = 500;
  double lblResult = (a / d)*100;
  return lblResult;
 }

Ответы [ 2 ]

4 голосов
/ 25 января 2010

Вы объединяете строки и затем пытаетесь преобразовать один результат в двойное. Таким образом, для результатов 75,6, 92,1, 56,3, 78,2 и 72,3 вы в конечном итоге попытаетесь разобрать «75,692,156.378.272.3».

Разобрать каждое значение и затем суммировать его.

Однако я настоятельно рекомендую использовать для этого decimal вместо double. Вам также следует рассмотреть возможность использования TryParse вместо Parse, чтобы вы могли корректно обрабатывать ошибки пользовательского ввода. Вот решение, придерживающееся Parse:

public decimal AveragePercentage()
{
    decimal sum = decimal.Parse(tbEnglish.Text) +
                  decimal.Parse(tbUrdu.Text) +
                  decimal.Parse(tbPhysics.Text) +
                  decimal.Parse(tbChemistry.Text) +
                  decimal.Parse(tbMaths.Text);
    return sum / 5m;
}

Из интереса, в вашем исходном коде, почему вы делите на 500, а затем умножаете на 100? Почему бы просто не разделить на 5 (как теперь, когда я заметил, что происходит)?

В качестве примечания очень важно различать ошибки времени компиляции и ошибки времени исполнения . Это не был компилятором, который говорил, что входная строка была не в правильном формате - это был метод Convert.ToDouble во время выполнения. В этом случае это было относительно очевидно, но в других ситуациях мы могли бы некоторое время преследовать свои хвосты, пытаясь найти проблему во время компиляции, когда она фактически не выполнялась во время выполнения.

0 голосов
/ 25 января 2010

У меня нет доступной мне Visual Studio здесь, на моей коробке с Linux, но я думаю, что вам лучше с таким кодом.

private double per()
{
   double a = Convert.ToDouble(tbEnglish.Text);
   a += Convert.ToDouble(tbPhysics.Text);
   a += Convert.ToDouble(tbChemistry.Text);
   a += Convert.ToDouble(tbMaths.Text);
   double d = 500;
   double lblResult = (a / d)*100;
   return lblResult;
}

В вашем примере вы в конечном итоге создаете строку , которая будет выглядеть следующим образом: "75.692.156.372.3", которую невозможно разобрать в двойное число.

Вам необходимо преобразовать все значения TextBox.Text в десятичные числа перед использованием оператора +.

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