Какую строку я должен передать java.lang.Long.parseLong (), чтобы вернуть NaN? - PullRequest
3 голосов
/ 09 мая 2011

К сожалению, я не могу использовать такие выражения, как Long.Nan, поскольку строка на самом деле является возвращаемым значением из другого модуля Си.Есть ли строка, которую я могу передать parseLong (), чтобы вернуть NaN?

Ответы [ 5 ]

7 голосов
/ 09 мая 2011

Long.NaN нет - вы в замешательстве.

Для Double.NaN, как насчет этого:

public double myParseDouble(String s)
{
   double result;
   try
   {
      result = Double.parseDouble(s);
   }
   catch (NumberFormatException nfe)
   {
      result = Double.NaN;
   }
   return result;
}

(правка: и очевидный подход - передать любую строку, которая является недопустимым двойным, например, пустую строку или NaN)

3 голосов
/ 09 мая 2011

Не существует такой вещи, как Long.NaN, что имеет смысл, если учесть, что каждая битовая комбинация в long представляет действительное целое число в диапазоне [Long.MIN_VALUE, Long.MAX_VALUE].

Вы можете попробовать вместо этого получить битовую комбинацию Double.NaN.

1 голос
/ 09 мая 2011

Java имеет концепцию NaN только для типов данных с плавающей запятой, а не для целочисленных, таких как Long.

1 голос
/ 09 мая 2011

java.lang.Long представляет 64-битное целое число со знаком, а NaN вводится только в вычислениях с плавающей запятой.При этом нет специальной строки, возвращающей Long NaN, но вы можете, например, использовать:

double notANumber = java.lang.Double.NaN;
1 голос
/ 09 мая 2011

Long.Nan? Этого не существует в Java. У вас есть только Long.MIN_VALUE и Long.MAX_VALUE

«Nan» в качестве аргумента для Double.parseDouble(String) дает Double.NaN в качестве значения, если вы этого хотите.

...