Переменная C # автоматически округляется в меньшую сторону, пока для нее установлено значение округления до 2 десятичных знаков

#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);