正如标题所示,我该如何检查特定的Double
是否为负数。这是我获取Double
实例的方法:
(Double.parseDouble(data[2])
你有什么想法或建议吗?
说得更严谨一些,< 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可以与负数采用相同的符号位。
Float
也是如此。 - Peter LawreyDouble v = (Double.parseDouble(data[2]));
if (v<0){
//do whatever?
}
< 0
:if (Double.parseDouble(data[2]) < 0) {
// the number is negative
} else {
// the number is positive
}
Double.parseDouble
方法返回一个double
(基本类型),而不是Double
对象。在这种情况下,这并不重要,但值得注意的是。您可以使用以下代码:if (foo < 0)
检查一个值是否为负数 - 但要注意,这并不是相反的意思
if (foo >= 0)
Double.parseDouble(data[2]);
这个方法不会返回一个 Double
,而是返回一个 double
。如果你把它赋值给一个 Double
,那么它会通过自动拆箱装箱的方式传递过去。如果想要判断它是否为负数,可以将其与0进行比较:
示例代码:
Double.parseDouble(data[2]) < 0;
我相当喜欢的另一个可能的解决方案是
Double v = Double.parseDouble(data[2]);
if (v == Math.abs(v))
{
//must be positive
}
else
{
//must be negative
}
double
和0
时,Java有陷阱。@peter-lawrey的答案正是我要找的。 - willkil