डबल क्लास में हस्ताक्षरित शून्य का उपयोग करना महत्वपूर्ण है। (अनुभवी जावा प्रोग्रामर के लोड नहीं करते हैं)।
संक्षिप्त उत्तर यह है कि ("परिभाषा के अनुसार)" -0.0 0.0 से कम है "डबल क्लास (यानी, बराबर(), तुलना(), तुलना करने के लिए(), आदि) द्वारा प्रदान की गई सभी विधियों में
डबल सभी फ़्लोटिंग पॉइंट संख्याओं को "एक संख्या रेखा पर पूरी तरह से आदेश दिया जा सकता है" की अनुमति देता है। प्राइमेटिव्स जिस तरह से उपयोगकर्ता चीजों के बारे में सोचेंगे (असली दुनिया परिभाषा) ...0 d = -0d
निम्नलिखित स्निपेट व्यवहार उदाहरण देकर स्पष्ट करना ...
final double d1 = 0d, d2 = -0d;
System.out.println(d1 == d2); //prints ... true
System.out.println(d1 < d2); //prints ... false
System.out.println(d2 < d1); //prints ... false
System.out.println(Double.compare(d1, d2)); //prints ... 1
System.out.println(Double.compare(d2, d1)); //prints ... -1
अन्य संगत पोस्ट कर रहे हैं और अच्छी तरह से पृष्ठभूमि समझाने ...
1 के होते हैं: Why do floating-point numbers have signed zeros?
2: Why is Java's Double.compare(double, double) implemented the way it is?
और सावधानी के एक शब्द ...
आपको लगता है कि पता नहीं है, डबल वर्ग में, "-0.0 कम से कम 0.0 है", तो आप बाहर पकड़े सकता है जब बराबरी की तरह विधि (का उपयोग करते हुए) और तुलना करें() और तुलना करें() तर्क परीक्षण में डबल से। उदाहरण के लिए, पर
final double d3 = -0d; // try this code with d3 = 0d; for comparison
if (d3 < 0d) {
System.out.println("Pay 1 million pounds penalty");
} else {
System.out.println("Good things happen"); // this line prints
}
if (Double.compare(d3, 0d) < 0) { //use Double.compare(d3, -0d) to match the above behaviour
System.out.println("Pay 1 million pounds penalty"); // this line prints
} else {
System.out.println("Good things happen");
}
देखो ... और के लिए बराबर होती है आप कोशिश कर सकते हैं ... नई डबल (डी 3) .equals (0 दिन) || नया डबल (डी 3) .equals (-0d)
इससे बचने का सामान्य तरीका '0.0' जोड़ना है। थोड़ा और विस्तार के लिए [यहां] (http://stackoverflow.com/a/8153449/823393) देखें। – OldCurmudgeon