5 ответов:
, потому что
Convert.ToInt32раундов:возвращаемое значение: округляется до ближайшего 32-разрядного целого числа со знаком. Если значение находится на полпути между двумя целыми числами, возвращается четное число; то есть 4.5 преобразуется в 4, а 5.5 преобразуется в 6.
...пока актерский состав усекает:
при преобразовании значения double или float в целочисленный тип значение усеченный.
обновление: см. комментарий Jeppe Stig Nielsen ниже для дополнительных различий (которые, однако, не вступают в игру, если
score- это действительное число, как и в данном случае).
литье будет игнорировать что-либо после десятичной точки, поэтому 8.6 становится 8.
Convert.ToInt32(8.6)Это безопасный способ убедиться, что ваш двойник округляется до ближайшего целого числа, в данном случае 9.
в приведенном примере ваша десятичная дробь 8.6. Если бы это было 8.5 и 9.5, заявление i1 == i2 может быть и так. На самом деле это было бы верно для 8.5, и false для 9.5.
объяснение:
независимо от десятичной части, второе утверждение,
int i2 = (int)scoreотбросит десятичную часть и просто вернет вам целочисленную часть. Довольно опасно, так как может произойти потеря данных.теперь, для во-первых, могут произойти две вещи. Если дробная часть 5, то есть половина, решение будет принято. Мы округлим вверх или вниз? В C# класс Convert реализует округление банкира. Смотрите этой ответа для более глубокого объяснения. Проще говоря, если число четное, округлить вниз, если число нечетное, округлить вверх.
Например, рассмотрим:
double score = 8.5; int i1 = Convert.ToInt32(score); // 8 int i2 = (int)score; // 8 score += 1; i1 = Convert.ToInt32(score); // 10 i2 = (int)score; // 9
Comments