Преобразование double в int в С#
В нашем коде у нас есть двойник, который нам нужно преобразовать в int.
double score = 8.6;
int i1 = Convert.ToInt32(score);
int i2 = (int)score;
Может ли кто-нибудь объяснить мне, почему i1 != i2
?
В результате я получаю следующее: i1 = 9
и i2 = 8
.
Ответы
Ответ 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 просто выбрасывает нецелый компонент.