Почему операторы деления (/) ведут себя по-разному в VB.NET и С#?
Если вы создаете новые проекты на С# и VB.NET, перейдите прямо в окно Immediate и введите следующее:
? 567 / 1000
С# вернет 0, а VB.NET вернет 0.567.
Чтобы получить тот же результат в С#, вам нужно ввести
? 567 / 1000.0
Почему это различие? Почему С# требует явной десятичной точки после 1000?
Ответы
Ответ 1
/operator в С# для целочисленных операндов выполняет операцию "целочисленное деление" (эквивалентно \operator в VB.NET). Для VB.NET это "нормальное" деление (даст дробный результат). В С#, чтобы сделать это, вы должны явно указать хотя бы один операнд в тип с плавающей точкой (например, double
).
Ответ 2
Поскольку в VB.NET оператор /
определен для возврата результата с плавающей запятой. Он расширяет свои входы до double
и выполняет разделение. В С# оператор /
выполняет целочисленное деление, когда оба входа являются целыми числами.
См. MSDN для VB.NET.
Разделяет два числа и возвращает результат с плавающей запятой.
Прежде чем выполнить деление, любые целочисленные числовые выражения будут расширены до Double.
См. MSDN для С#.
Оператор деления (/) делит свой первый операнд на второй. Все числовые типы имеют предопределенные операторы деления.
Когда вы делите два целых числа, результат всегда является целым числом.
Чтобы получить ту же семантику в VB.NET, что и оператор /
для целых чисел в С#, используйте оператор \
.
Разделяет два числа и возвращает целочисленный результат.
Ответ 3
По умолчанию С# обрабатывает 576/1000 как целочисленное деление, поэтому вы получаете целое число в качестве результата.
В VB.NET он рассматривает это как деление с плавающей запятой.
Добавив ".0" в число в С#, вы явно указываете, что это число является числом с плавающей запятой, и, следовательно, деление становится также плавающей точкой.
Ответ 4
Языки разные. В С# компилятор интерпретирует эти числа как целые числа и использует целочисленное деление. В VB.NET компилятор использует деление с плавающей запятой.
Ответ 5
Справочник по языку С#
Справочник по языку VB.Net
У VB.Net есть и/и a\operator./является оператором деления с плавающей запятой.