#c#
#c#
Вопрос:
Каждый раз, когда я запускаю это, она округляется num13
в меньшую сторону, чего я не хочу. Я хочу, чтобы она округлялась до 2 знаков после запятой. Как мне округлить ее до 2 знаков после запятой, чтобы, например, если я введу правильный ответ, то 10 / 4 == 2.50
значение if (num12 == num13)
будет равно true
? Прямо сейчас num13
оценивается в 2 вместо ожидаемых 2,5.
Random NumberGen = new Random();
start6:
int num10 = NumberGen.Next(1, 11);
int num11 = NumberGen.Next(1, 11);
start5:
if (num10 > num11)
{
Console.Write(num10 " / " num11 " = ");
decimal num12;
num12 = Convert.ToDecimal(Console.ReadLine());
num12 = Math.Round(num12, 2);
decimal num13;
num13 = num10 / num11;
num13 = Math.Round(num13, 2);
if (num12 == num13)
{
Console.Clear();
goto start;
}
else
{
Console.WriteLine("wrong answer, try again.");
goto start5;
}
}
else
{
goto start6;
}
Комментарии:
1. Документация — ваш друг.
2. Целочисленное деление…
10/4 = 2
при делении целых чисел, поскольку остаток усекается.3. Почему вы используете операторы goto в c #?!?
4. Я бы настоятельно рекомендовал избегать
goto
любой ценой. Есть несколько мест, где это считается общепринятым для использованияgoto
, но это очень специфические случаи. Это создает очень плохой поток программы.5. спасибо, это сработало, я тупой
Ответ №1:
Как бы удивительно это ни звучало,
decimal a = 10 / 4;
даст результат 2
, а не 2.5
. Это потому, что /
оператор выполняет целочисленное деление, если оба его операнда ( 10
и 4
) являются целыми числами:
Когда вы делите два целых числа, результатом всегда является целое число. (Источник: MSDN)
В вашем случае это можно исправить, убедившись, что один из ваших операндов не является целым числом:
decimal num13;
num13 = (decimal)num10 / num11;
(И пока вы этим занимаетесь: пожалуйста, подумайте о том, чтобы сделать имена ваших переменных более описательными.)
Комментарии:
1. вы предложили тот же ответ, но до меня:(
Ответ №2:
Вам сначала нужно будет инициализировать num10 и num11 как десятичные или двойные, так как при делении двух целых чисел вы получите целочисленное значение.
Ответ №3:
decimal num13;
num13 = (decimal)num10 / num11;
Ответ №4:
в одной строке
decimal num13= Math.Round((decimal)num10 / num11, 2);