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;
}