如何检查Double值是否为负数?

15

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

(Double.parseDouble(data[2])

你有什么想法或建议吗?


1
关于我能想到的唯一可能是,如果有一个负零的奇怪情况,但是... - Clockwork-Muse
在问题本身中确实有一个角落我应该提到,是的,我同意我应该先说出我尝试过的方法,无论如何,如果有人能删除这个问题,那么请这样做,因为它在这里没有价值。 - Rachel
2
关闭原因是“此问题不太可能对任何未来的访问者有所帮助”。这个问题的答案节省了我很多时间。我讨厌 Stack Overflow。 - Mitch
2
这个问题不应该被关闭。我在谷歌上搜索了“java double is positive”,特别是为了处理“-0.0”边角情况的技巧。这是最好的结果。我永远记不住这个技巧,但我知道当比较double0时,Java有陷阱。@peter-lawrey的答案正是我要找的。 - willkil
1
@Rachel 我建议将已接受的答案更改为(投票最多的那一个)[https://dev59.com/b2kv5IYBdhLWcg3wtTG7#10400718]。(如果您可以。我不知道是否允许在关闭的问题上这样做。) - willkil
6个回答

58

说得更严谨一些,< 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可以与负数采用相同的符号位。


2
绝非卖弄学问!这是绝对正确的,我遇到过-0.0出现多次,并坚称它绝对大于或等于0,在任何负数都会导致故障的关键部分。要知道x >= 0对于某个特定的负数是成立的,这是需要注意的事情。 - Tatarize
1
很好。值得注意的是,因为您不一定会直觉到,Double.compareTo() 明确将 0.0d 视为严格大于 -0.0d。(同样,Double.equals() 的工作方式也相同。) - mwfearnley
1
@matthewfearnley 对于 Float 也是如此。 - Peter Lawrey
绝对正确 - obi

21
Double v = (Double.parseDouble(data[2]));
if (v<0){
//do whatever?
}

4
这个答案不正确。请看下面。 - Mitch

5
您可以测试它是否为< 0:
if (Double.parseDouble(data[2]) < 0) {
    // the number is negative
} else {
    // the number is positive
}

4
Double.parseDouble方法返回一个double(基本类型),而不是Double对象。在这种情况下,这并不重要,但值得注意的是。您可以使用以下代码:
if (foo < 0)

检查一个值是否为负数 - 但要注意,这并不是相反的意思

if (foo >= 0)

由于“非数字”值的原因,它不能起作用。不过,它可以处理无限大的值。

2
Double.parseDouble(data[2]);

这个方法不会返回一个 Double,而是返回一个 double。如果你把它赋值给一个 Double,那么它会通过自动拆箱装箱的方式传递过去。如果想要判断它是否为负数,可以将其与0进行比较:

示例代码:

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

1

我相当喜欢的另一个可能的解决方案是

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

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

因为它无法处理-0.0并且等同于但不如“x < 0”清晰,所以被踩了。 - Urban Vagabond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接