Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > из double в int


Автор: Wanderer2019 1.5.2005, 17:12
срочно нужна помощь!!!!!!! как перевести из double В INT на C шарпе...
что то типа (int)double не работает!!!!

Автор: alir 1.5.2005, 17:41
Цитата
как перевести из double В INT на C шарпе...
что то типа (int)double не работает!!!!

Почему не работает? Например:
Код

int a;
double c = 3.11;
a = (int)c;
Console.WriteLine(a);

Корректно выводит "3".

Автор: Kurt 1.5.2005, 21:17
alir
Смотря как понимать слова
Цитата(Wanderer2019)
перевести из double В INT на C шарпе

Ведь твой код и при
Код
double c = 3.6;

выдаст "3". Что, если понимать вышеуказанное как "округлить", не соответствует действительности.
Если речь идет об округлении до целых, то корректнее было бы написать так:
Код
a = (int)Math.Round(c);


P.S. Однако, ввиду некорректности вопроса нельзя сказать, какой вариант является верным. smile

Автор: -ser- 2.5.2005, 03:47
это все старые Си-шные варианты, которыми и я по привычке пользуюсь. наверно более изящно было бы использовать
Код

Convert.ToInt32( d ) 

зачем-то же мелкие его создали. так что, господа, приучайтесь к аристократизму.

Автор: Gazon 2.5.2005, 04:09
Цитата(ser @ 2.5.2005, 03:47)
это все старые Си-шные варианты, которыми и я по привычке пользуюсь. наверно более изящно было бы использовать
Код

Convert.ToInt32( d ) 

зачем-то же мелкие его создали. так что, господа, приучайтесь к аристократизму.

Вот исходник этого метода:
Код

public static int ToInt32(double value)
{
      if (value >= 0)
      {
            if (value >= 2147483647.5)
            {
                  goto Label_007A;
            }
            int num1 = (int) value;
            double num2 = value - num1;
            if ((num2 > 0.5) || ((num2 == 0.5) && ((num1 & 1) != 0)))
            {
                  num1++;
            }
            return num1;
      }
      if (value >= -2147483648.5)
      {
            int num3 = (int) value;
            double num4 = value - num3;
            if ((num4 < -0.5) || ((num4 == -0.5) && ((num3 & 1) != 0)))
            {
                  num3--;
            }
            return num3;
      }
Label_007A:
      throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
}

Видно, что в нем точно так же происходит приведение типа к int.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)