Я пытаюсь сложить все значения курса студентов, чтобы получить среднее значение. Значения сохраняются в базе данных, но когда я пытаюсь сложить значения вместе и вставить их в текстовое поле, они вставляют оба значения в текстовое поле вместо добавления значений вместе.
string output = "";
output += (dr["Course 1"].ToString());
output += (dr["Course 2"].ToString());
txtbxaverage.Text = output;
}
Я пытаюсь добавить значения из базы данных вместе, но когда я вставляю его в текстовое поле, он вставляет каждое значение вместо добавления значений вместе
хорошо, если вы хотите сложить их вместе, вы должны преобразовать их в число, а затем добавить
Курс 1 и Курс 2 - это инт? и ты хочешь их добавить
просто преобразуйте это ((dr["Course 1"].ToString());) в десятичное или целочисленное, затем добавьте значения в одну переменную
Возможно, вы не понимаете, что «+» здесь делает разные вещи. "Tayla"+" "+"Brown" представляет собой конкатенацию строк и дает "Tayla Brown" 5+4 является сложением и дает 9 Сбивает с толку "Tayla"+9 работает и дает "Tayla9" (сначала внутренний вызов ToString() на 9) Вы смешиваете разные типы и несвязанные операции
если вы добавляете строки вместе, вы выполняете конкатенацию строк, вам нужно сначала преобразовать результат в примитивы, такие как decimal или int ((decimal)dr["Course 1"])
Мне нужно изменить строку на int? Это правильно?
Когда вы добавляете 2 строки вместе, они объединяются вместе.
"Привет" + "_Мир" = "привет_Мир"
Ты хочешь:
string output = "";
output += dr["Course 1"];
output += dr["Course 2"]);
txtbxaverage.Text = output.ToString();
Вы вызываете "ToString()" только ПОСЛЕ сложения целых чисел.
Здесь вы все еще объединяете строки, поэтому результат будет таким же.
Ах извините за это. Я неправильно предположил, что dr["Course 1"] был int, потому что OP вызывал ToString(). Спасибо что подметил это.
Даже если бы dr[]
было целым числом, вы все равно получили бы строку, потому что output
— это строка, поэтому output += dr[...]
всегда будет строкой, поскольку dr[...]
будет неявно преобразован.
я бы сделал вот так
txtbaverage.Text = $"{decimal.Parse(dr["Course 1"])+decimal.Parse(dr["Course 2"])}";
строка + строка эквивалентна
"1" + "1" == "11"
десятичный + десятичный эквивалент
1 + 1 == 2
так что вам нужно преобразовать, например
decimal.Parse("1") + decimal.Parse("1") == 2
выполнение прямого приведения (десятичное) dr["Course 1"] если dr["Course 1"] является объектом, преобразует его в десятичное число, тогда его можно добавить
Я пробовал это, но выдал сообщение об ошибке: «Указанное приведение недействительно»?
Просто объясните, что это связано с упаковкой и распаковкой. docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/… объясняет это довольно хорошо, но в основном вам нужно получить значения того типа, который вы можете добавить, будь то int или decimal.
Как упоминалось в комментариях, использование «+» со строками объединяет их, то есть «Foo» + «Bar» даст вам «FooBar». В вашем случае то, что вам нужно сделать, зависит от типа, который хранится в массиве dr[]
. Если в массиве хранятся целые числа, вы можете просто добавить их напрямую, например так:
string output = "";
int sum = dr["Course 1"] + dr["Course 2"];
output = sum.ToString();
Если в массиве хранятся числа с плавающей запятой или удвоения, это то же самое, за исключением того, что вам нужно объявить sum
как соответствующий тип.
Если в массиве хранятся строки, вам необходимо проанализировать их перед суммированием, например:
string output = "";
int sum = 0;
int value1, value2;
int.TryParse(dr["Course 1"], out value1);
int.TryParse(dr["Course 2"], out value2);
sum = value1 + value2;
output = sum.ToString();
Оператор «+» со строками предназначен для конкатенации, а не для сложения. Для простоты: "3" + "4" != "7", "3" + "4" = "34".
Теперь, если вы хотите вычислить сумму ряда строк, вы можете объявить переменную, начинающуюся с 0, и добавить к этой переменной каждую строку, преобразованную в int. Что-то вроде этого:
int result = 0;
result += Convert.ToInt32(dr["Course 1"].ToString());
result += Convert.ToInt32(dr["Course 2"].ToString());
//And so on
Кроме того, если dr является массивом, вместо того, чтобы иметь одну строку для каждого значения в массиве, вы можете перебирать их все с помощью цикла for или foreach:
for (int i = 0; i < dr.length; i++)
{
result += Convert.ToInt32(dr[i].ToString());
}
И если dr представляет собой массив целых чисел или какого-либо другого числового типа, вам не нужно использовать функцию ToString. Сделайте это вместо этого:
result += dr[i];
Я не мог понять, что вы спрашиваете. Просто быть чистым; В их txtbxmarks.Text = ("Курс 1:") + " " + (dr["Курс 1"].ToString()) .. вы просто объединили строки. Если вы хотите сложить их вместе, вы должны преобразовать их в число и добавить