Вы объединяете строки, а затем пытаетесь преобразовать этот результат в двойной. Таким образом, для результатов 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
во время выполнения. В этом случае это было относительно очевидно, но в других ситуациях мы могли бы некоторое время преследовать наши хвосты, пытаясь найти проблему времени компиляции, когда она фактически не срабатывала во время выполнения.
Я чувствую себя идиотом за вопрос, но что такое синтаксис «500 м»? Что такое «м»? – Sapph
@Sapph: Указывает числовой литерал типа 'decimal'. (т. е. это десятичный эквивалент 'd' для double или' f' для float) –
Очень полезно знать, спасибо! – Sapph