2012-05-01 5 views
1

Как следует из названия, как я могу проверить, является ли конкретный Double отрицательным или нет. Вот как я получаю Double экземплярКак проверить, является ли двойное значение отрицательным или нет?

(Double.parseDouble(data[2]) 

мысли, предложения?

+4

Я не занимаюсь этим, но это не может быть серьезным вопросом ... – dasblinkenlight

+1

О единственном, о чем я могу думать, это если есть какой-то странный угловой случай с отрицательным 0, но все же ... –

+0

Был действительно угол, который я должен был упомянуть в самом вопросе, и да, я согласен с тем, что мне следовало бы включить то, что я пробовал первым, так или иначе, если кто-то может удалить этот вопрос, тогда plz сделает так, как это не стоит иметь его здесь. – Rachel

ответ

5

Вы можете проверить, если это < 0:

if (Double.parseDouble(data[2]) < 0) { 
    // the number is negative 
} else { 
    // the number is positive 
} 
1
Double.parseDouble(data[2]); 

Не дает вам Double, он возвращает double. Если вы назначаете его Double, он попадает туда через автобоксинг. В любом случае, если это отрицательно, сравните его с 0? Как и в:

Double.parseDouble(data[2]) < 0; 
3

Double.parseDouble возвращает double (примитивный) не Double. В этом случае это не имеет большого значения, но это стоит знать.

Вы можете использовать:

if (foo < 0) 

, чтобы проверить, является ли значение отрицательное - но имейте в виду, что это не противоположность

if (foo >= 0) 

из-за «не число» значения. Однако он работает с бесконечными значениями.

0

Другим возможным решением, которое я очень люблю это

Double v = Double.parseDouble(data[2]); 

if (v == Math.abs(v)) 
{ 
    //must be positive 
} 
else 
{ 
    //must be negative 
} 
+0

Downvoted, потому что он не может обрабатывать -0.0 и эквивалентен, но менее прозрачен, чем «x <0». –

25

Будучи педантичным, < 0 не даст вам все отрицательные числа.

double d = -0.0; 
System.out.println(d + " compared with 0.0 is " + Double.compare(d, 0.0)); 
System.out.println(d + " < 0.0 is " + (d < 0.0)); 

печатает

-0.0 compared with 0.0 is -1 
-0.0 < 0.0 is false 

-0.0 является отрицательным, но не менее 0.0

Вы можете использовать

public static boolean isNegative(double d) { 
    return Double.compare(d, 0.0) < 0; 
} 

Более эффективным, если более тупые, версия для проверки бит.

public static boolean isNegative(double d) { 
    return Double.doubleToRawLongBits(d) < 0; 
} 

Примечание: в соответствии с IEEE-754 NaN может иметь тот же самый бит, что и отрицательный номер.

+0

Вряд ли педантичный!Это абсолютно правильно, я уже несколько раз приходил -0.0 и настаивал на том, что он абсолютно больше или равен 0, в критических секциях, где любой негатив будет раздавать ключ в передачах. То, что x> = 0 истинно для одного конкретного отрицательного числа, - это то, о чем нужно знать. – Tatarize

+1

Прохладный. Стоит отметить, потому что вы не обязательно это понимаете, что Double.compareTo() явно считает, что 0.0d строго больше -0.0d. (Также Double.equals() работает одинаково.) – mwfearnley

+0

@matthewfearnley Также верно для 'Float' –

Смежные вопросы