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.parseDoubledoubleではなく (プリミティブ) を返しますDouble。この場合、それは実際には問題ではありませんが、注意する価値があります。

以下を使用できます。

if (foo < 0)

値が負かどうかを確認します - ただし、これは逆ではないことに注意してください

if (foo >= 0)

「数値ではない」値のため。ただし、無限の値でも機能します。

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

を与えず、 をDouble返しますdouble。に割り当てている場合は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 に答える