Лучший способ бросить объект к интервалу

Полагаю, вы имеете в виду 16 цифр, а не 16 бит. 16 бит действительно легко, и вы можете просто проверить это с помощью простого цикла и деления. Ваш checkPrime() может быть оптимизирован следующим образом:

public static boolean checkPrime(long n)
{
    if (n == 2)
        return true;

    if (n % 2 == 0)
        return false;

    for (long i = 3; i <= Math.sqrt(n); i += 2) 
    {
        if (n % i == 0)
            return false;
    }

    return true;
}

Но если число становится слишком большим (я думаю, что даже для 16 цифр это не понадобится), вы можете использовать примитивность Миллера-Робина тест . Этот тест можно использовать для проверки, является ли число ОЧЕНЬ БОЛЬШИМ простым или нет.

Если вам нужно сгенерировать все простые числа до определенного числа , вы можете использовать Сито Эратосфена .

Просто помните, что диапазон int составляет от -2,147,483,648 до 2,147,483,647, поэтому он не может содержать 16-значное число. Вы можете использовать long, потому что его диапазон от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807, поэтому он может содержать 16-значный номер.

162
задан Steve 13 April 2009 в 20:02
поделиться

6 ответов

У вас есть несколько вариантов:

  • (int) - Оператор приведения. Работает, если объект уже является целым числом на некотором уровне в иерархии наследования или если определено неявное преобразование.

  • int.Parse () / int.TryParse () - Для преобразования из строки неизвестного формата.

  • int.ParseExact () / int.TryParseExact () - для преобразования из строки в определенный формат

  • Convert.ToInt32 () - для преобразования объекта неизвестного типа. Он будет использовать явное и неявное преобразование или реализацию IConvertible, если таковые определены.

  • как int? - Обратите внимание на «?». Оператор as предназначен только для ссылочных типов, поэтому я использовал «?» для обозначения Nullable . " as " оператор работает как Convert.To ____ () , но подумайте TryParse () , а не Parse () : он возвращает ноль , а не бросает исключение, если преобразование завершается неудачей.

Из них я бы предпочел (int) , если объект действительно представляет собой целое число в штучной упаковке. В противном случае используйте Convert.ToInt32 () в этом случае.

Обратите внимание, что это очень общий ответ : я хочу обратить внимание на ответ Даррена Кларка, потому что я думаю, что это так хорошая работа по рассмотрению специфики здесь, но пришла поздно и еще не проголосовала. Во всяком случае, он получает мой голос за «принятый ответ», за то, что тоже рекомендовал (int) указать, что в случае неудачи (int) (short) может работать вместо этого,

340
ответ дан 23 November 2019 в 21:21
поделиться

Приведение (int) myobject должно просто работать.

Если это дает вам недопустимое исключение приведения, то это, вероятно, потому, что тип варианта isn ' t VT_I4. Я держу пари, что вариант с VT_I4 преобразуется в упакованное int, VT_I2 - в короткое и т.д.

При приведении типа в штучной упаковке допустимо приводить только тип в штучной упаковке. Например, если возвращенный вариант на самом деле является VT_I2, то (int) (short) myObject должен работать.

Самый простой способ выяснить это проверить возвращаемый объект и взглянуть на его тип в отладчик. Также убедитесь, что в сборке взаимодействия у вас есть возвращаемое значение, помеченное MarshalAs (UnmanagedType.Struct)

37
ответ дан 23 November 2019 в 21:21
поделиться
Convert.ToInt(myobject);

Это будет обрабатывать случай, когда myobject равен null и возвращать 0 вместо исключения.

28
ответ дан 23 November 2019 в 21:21
поделиться

Используйте Int32.TryParse следующим образом.

  int test;
  bool result = Int32.TryParse(value, out test);
  if (result)
  {
     Console.WriteLine("Sucess");         
  }
  else
  {
     if (value == null) value = ""; 
     Console.WriteLine("Failure");
  }
8
ответ дан 23 November 2019 в 21:21
поделиться

Также есть TryParse .

Из MSDN:

private static void TryToParse(string value)
   {
      int number;
      bool result = Int32.TryParse(value, out number);
      if (result)
      {
         Console.WriteLine("Converted '{0}' to {1}.", value, number);         
      }
      else
      {
         if (value == null) value = ""; 
         Console.WriteLine("Attempted conversion of '{0}' failed.", value);
      }
   }
2
ответ дан 23 November 2019 в 21:21
поделиться

Может быть Convert.ToInt32 .

Следите за исключениями, в обоих случаях.

1
ответ дан 23 November 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: