Подтвердить что ты не робот

Преобразование double в int в С#

В нашем коде у нас есть двойник, который нам нужно преобразовать в int.

double score = 8.6;
int i1 = Convert.ToInt32(score);
int i2 = (int)score;

Может ли кто-нибудь объяснить мне, почему i1 != i2?

В результате я получаю следующее: i1 = 9 и i2 = 8.

4b9b3361

Ответ 1

Потому что Convert.ToInt32 раунды:

Возвращаемое значение: округляется до ближайшего 32-разрядного целого числа со знаком. Если значение находится на полпути между двумя целыми числами, возвращается четное число; то есть 4.5 преобразуется в 4, а 5.5 преобразуется в 6.

... пока литые обрезают:

Когда вы конвертируете из двойного или плавающего значения в интегральный тип, значение усечено.

Обновление: См. комментарий Jeppe Stig Nielsen ниже для дополнительных отличий (которые, однако, не вступают в игру, если score - это реальное число, как здесь).

Ответ 2

Кастинг будет игнорировать что-либо после десятичной точки, поэтому 8.6 становится 8.

Convert.ToInt32(8.6) - безопасный способ обеспечения округления двойника до ближайшего целого числа, в данном случае 9.

Ответ 3

вы можете объединить свои двойные и литые:

(int)Math.Round(myDouble);

Ответ 4

ToInt32 раундов. Кастинг для int просто выбрасывает нецелый компонент.