Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查双精度值是否为负值?_Java_Double - Fatal编程技术网

Java 如何检查双精度值是否为负值?

Java 如何检查双精度值是否为负值?,java,double,Java,Double,正如标题所示,如何检查特定的Double是否为负值。下面是我如何获得Double实例 (Double.parseDouble(data[2]) 想法、建议?您可以测试它是否是

正如标题所示,如何检查特定的
Double
是否为负值。下面是我如何获得
Double
实例

(Double.parseDouble(data[2])

想法、建议?

您可以测试它是否是
<0

if (Double.parseDouble(data[2]) < 0) {
    // the number is negative
} else {
    // the number is positive
}
if(Double.parseDouble(数据[2])<0){
//这个数字是负数
}否则{
//这个数字是正数
}
Double v=(Double.parseDouble(数据[2]);
如果(v)
不会给您一个
双精度
,它会返回一个
双精度
。如果您将其分配给
双精度
,它会通过自动装箱到达。无论如何,要查看它是否为负,请将其与0进行比较? 例如:

Double.parseDouble(数据[2])<0;

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

您可以使用:

if (foo < 0)

由于“不是一个数字”的值。但它确实适用于无穷大的值。

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

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

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

学究式的,
<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));
一个更有效(如果更钝的话)的版本是检查有符号位

public static boolean isNegative(double d) {
     return Double.doubleToRawLongBits(d) < 0;
}
公共静态布尔值为负(双d){
返回Double.doubleToRawLongBits(d)<0;
}

注:根据IEEE-754,NaN可以具有与负数相同的符号位。

我并不反对这一点,但这不可能是一个严肃的问题……我唯一能想到的是,如果有某个wierd角落的案例为负0,但仍然……关闭,因为“这个问题不太可能帮助任何未来的访问者”.这个问题的答案为我节省了很多时间。我讨厌这样。这个问题不应该被关闭。我在谷歌搜索“java double是肯定的”专门针对处理
-0.0
角落案例的技巧。这是最重要的结果。我永远记不起这个技巧了,但我知道java在比较
-double
s和
0
时遇到了问题。@peter lawrey的答案正是我想要的。@Rachel我建议将被接受的答案改为(投票最多的那个)[(如果可以的话,我不知道封闭式问题是否允许。)很不迂腐!这是绝对正确的,我已经让-0.0出现了好几次,并且坚持它绝对大于或等于0,在任何负数都会使齿轮转动的关键部分。对于一个特定的负数,x>=0是正确的,这是一件值得注意的事情。酷。值得注意的是,因为你不必凭直觉,Double.compareTo()显式地认为0.0d严格大于-0.0d。(同样,Double.equals()的工作原理也是如此。)@matthewfearnley也适用于
Float
绝对正确,因为它无法处理-0.0,与“x<0”相等,但不太清晰.此答案不正确。请参阅下文。
if (foo >= 0)
Double v = Double.parseDouble(data[2]);

if (v == Math.abs(v))
{
    //must be positive
}
else
{
    //must be negative
}
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
public static boolean isNegative(double d) {
     return Double.compare(d, 0.0) < 0;
}
public static boolean isNegative(double d) {
     return Double.doubleToRawLongBits(d) < 0;
}