Почему операторы деления (/) ведут себя по-разному в VB.NET и C #? - PullRequest
22 голосов
/ 23 декабря 2009

Если вы создаете новые проекты в C # и VB.NET, перейдите непосредственно в окно немедленного ввода и введите:

? 567 / 1000

C # вернет 0, а VB.NET вернет 0,567.

Чтобы получить тот же результат в C #, вам нужно набрать

? 567 / 1000.0

Почему эта разница? Почему C # требует явной десятичной точки после 1000?

Ответы [ 5 ]

34 голосов
/ 23 декабря 2009

Оператор / в C # для целочисленных операндов выполняет операцию "целочисленного деления" (эквивалентно оператору \ в VB.NET ). Для VB.NET это «нормальное» деление (даст дробный результат). В C # для этого вам нужно явно привести хотя бы один операнд к типу с плавающей запятой (например, double).

11 голосов
/ 23 декабря 2009

Поскольку в VB.NET оператор / определен для возврата результата с плавающей запятой. Он расширяет свои входы до double и выполняет деление. В C # оператор / выполняет целочисленное деление, когда оба входа являются целыми числами.

См. MSDN для VB.NET .

Делит два числа и возвращает результат с плавающей запятой.

Перед выполнением деления любые целочисленные числовые выражения расширяются до Double.

См. MSDN для C # .

Оператор деления (/) делит свой первый операнд на второй. Все числовые типы имеют предопределенные операторы деления.

Когда вы делите два целых числа, результатом всегда является целое число.

Чтобы получить ту же семантику в VB.NET, что и оператор / для целых чисел в C #, используйте оператор \ .

Делит два числа и возвращает целочисленный результат.

3 голосов
/ 23 декабря 2009

По умолчанию C # рассматривает 576/1000 как целочисленное деление, поэтому в качестве результата вы получаете целое число.

В VB.NET это рассматривается как деление с плавающей запятой.

Добавляя «.0» к числу в C #, вы явно сообщаете ему, что это число является числом с плавающей запятой, и, следовательно, деление становится также с плавающей запятой.

2 голосов
/ 23 декабря 2009

Справочник по языку C #

Справочник по языку VB.Net

VB.Net имеет операторы a / и a. / оказывается оператором деления с плавающей запятой.

2 голосов
/ 23 декабря 2009

Языки разные. В C # компилятор интерпретирует эти числа как целые числа и использует целочисленное деление. В VB.NET компилятор использует деление с плавающей запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...