Во-первых, ваше предположение, что CInt
эквивалентно (int)
в C #, неверно.
Во-вторых, поведение округления CInt
не назначается случайным образом - оно фактически использует «округление банкиров»:
Дробные части. При преобразовании нецелого значения в целое
тип, целочисленные функции преобразования (CByte, CInt, CLng, CSByte,
CShort, CUInt, CULng и CUShort) удалить дробную часть и
округлить значение до ближайшего целого числа.
Если дробная часть равна точно 0,5, целочисленное преобразование
округляет его до ближайшего четного целого числа . Например, 0,5
округляет до 0, а 1,5 и 2,5 оба округляют до 2. Это иногда называют
округление банкира, и его цель состоит в том, чтобы компенсировать
может накапливаться при сложении многих таких чисел.
Наилучшим эквивалентом использования (int)
в C # является функция Fix
в пространстве имен VisualBasic
, которая округляется до нуля (аналогично Math.Truncate
).
Это, однако, возвращает значение Double, поэтому вам нужно выполнить дальнейшее преобразование, чтобы получить целое число, используя CInt
.
CInt(Fix(10.5)) '10
CInt(Fix(10.51)) '10
CInt(Fix(11.5)) '11
CInt(Fix(-10.5)) '-10
CInt(Fix(-10.51)) '-10
CInt(Fix(-11.5)) '-11