\ Выполняет целочисленное деление в VB? - PullRequest
7 голосов
/ 26 августа 2011

В VB.NET, даже если оба операнда целочисленные, оператор / вызовет значение с плавающей запятой (если результат не целочисленный).

Итак, я попытался с оператором \, который выдает целочисленное значение независимо от операндов.
Поэтому я подумал, \ - это целочисленное деление.

2.5 \ 3 приводит к 0.

Теперь я попробовал 1.5 \ 2. Я ожидал, что это будет 0, но это привело к 1.
Это ошибка или правильный результат?
Что такое оператор \ на самом деле?

Если это ошибка, она существует прямо через VB6.

Ответы [ 3 ]

16 голосов
/ 26 августа 2011

Если вы используете \ для нецелых чисел, вы сначала конвертируете их в целые числа , что вызывает округление : эквивалент CLng(1.5) \ 2, который равен 2 \ 2 или 1.

Если вы используете Option Strict On, то вы увидите, что это происходит.

4 голосов
/ 26 августа 2011

См. Раздел Remarks в документации :

Перед выполнением деления Visual Basic пытается преобразовать любой числовое выражение с плавающей точкой в ​​Long. ... Преобразование в Long также подлежит банковскому округлению.

Это означает, что 1,5 \ 2 становится 2/2, что равно 1.

Округление банкира (из Функции преобразования типов ):

Если дробная часть точно равна 0,5, целочисленное преобразование функций округляет ее до ближайшего четного целого . Например, 0,5 округляется до 0, а 1,5 и 2,5 округляются до 2. Это иногда называется округлением банкира, и его целью является компенсация смещения, которое может накапливаться при сложении многих таких чисел.

2 голосов
/ 26 августа 2011

не ошибка, а просто результат округляется до ближайшего целого числа. Оператор / используется для деления чисел и целых чисел с плавающей или двойной, не забывая также о типе Decimal.

Привет.

...