11

正如标题所示,我如何检查特定Double是否为负数。这是获取Double实例的方式

(Double.parseDouble(data[2])

想法、建议?

4

6 回答 6

51

迂腐,< 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 可以具有与负数相同的有符号位。

于 2012-05-01T16:19:34.343 回答
21
Double v = (Double.parseDouble(data[2]));
if (v<0){
//do whatever?
}
于 2012-05-01T15:17:40.223 回答
5

你可以测试它是否是< 0

if (Double.parseDouble(data[2]) < 0) {
    // the number is negative
} else {
    // the number is positive
}
于 2012-05-01T15:16:57.743 回答
4

Double.parseDouble返回 a double(原始)而不是 a Double。在这种情况下,这并不重要,但值得注意。

您可以使用:

if (foo < 0)

检查一个值是否为负 - 但请注意这不是相反的

if (foo >= 0)

由于“不是数字”值。不过,它确实适用于无限值。

于 2012-05-01T15:21:49.910 回答
2
Double.parseDouble(data[2]);

不给你 a Double,它返回 a double。如果您将它分配给 a Double,它会通过自动装箱到达那里。无论如何,看看它是否为负,将其与 0 进行比较?如:

Double.parseDouble(data[2]) < 0;
于 2012-05-01T15:21:38.553 回答
0

我非常喜欢的另一个可能的解决方案是

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

if (v == Math.abs(v))
{
    //must be positive
}
else
{
    //must be negative
}
于 2012-05-01T15:23:25.060 回答