@DeboshiR
Свободу разработчикам!!!

Деление меньшего на большее возвращает ноль. Как исправить?

Давно я конечно не писал на C#, но с таким ещё не встречался. Собственно, скажем, если 1 поделить на 7 в качестве ответа вернётся 0.
Например:
Console.WriteLine((1 / 7).ToString());
Это я что-то делаю не так, глюк в VS или изменилась правила деления?
  • Вопрос задан
  • 1432 просмотра
Пригласить эксперта
Ответы на вопрос 3
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
нет и нет... почти все слова. почти правильные...

но суть в том, что если оба операнда int то и результат будет int...

начните с этого
Console.WriteLine((1.0 / 7).ToString());
или
Console.WriteLine((1 / 7.0).ToString());
или
Console.WriteLine((1f / 7).ToString());
или
Console.WriteLine((1 / 7d).ToString());
или
Console.WriteLine((((double)1) / 7).ToString());
или
Console.WriteLine((1 /((float)(7))).ToString());
для верности сравните с
Console.WriteLine(((float)(1 / 7)).ToString("0.##"));

... обдумайте, почему во последнем примере, приведени к "плавающей точке" запоздало... и будет полное понимание, удачи..

ps

... по быренькому можно тут все проверить - https://dotnetfiddle.net/

Давно я конечно не писал на C#..

..или изменилась правила деления?

... а тут огорчу )))... в C# так было всегда (еще точнее - во всех строготипизированых ЯП)
Ответ написан
rugrisser
@rugrisser
Web and Android developer
Попробуй данное выражение вывести в переменную с типом вещественных чисел(float/double/decimal), потом также выводи (с .ToString();). Выводит 0, тк он воспринимает их как int(целое число) и, следовательно, выполняет целочисленное деление. Также можно попробовать заменить, например, 1 на 1.0, чтоб компилятор воспринимал его как вещественное число
Ответ написан
Комментировать
@DeboshiR Автор вопроса
Свободу разработчикам!!!
Однако я и сам нашёл вполне пригодный ответ: Console.WriteLine(((double) 1 / 7).ToString());
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы