मेरे पास जावा में एक डबल है और मैं जांचना चाहता हूं कि क्या यह है NaN
। इसे करने का बेहतरीन तरीका क्या है?
मेरे पास जावा में एक डबल है और मैं जांचना चाहता हूं कि क्या यह है NaN
। इसे करने का बेहतरीन तरीका क्या है?
जवाबों:
स्थिर का प्रयोग Double.isNaN(double)
विधि, या अपने Double
की .isNaN()
विधि।
// 1. static method
if (Double.isNaN(doubleValue)) {
...
}
// 2. object's method
if (doubleObject.isNaN()) {
...
}
बस कर:
if (var == Double.NaN) {
...
}
है पर्याप्त नहीं कैसे की वजह से NaN के लिए IEEE मानक और चल बिन्दु संख्या परिभाषित किया गया है।
Double.isNaN should be (true)
अच्छा जवाब
value == Double.NaN
काम नहीं करता है, लेकिन Double.isNaN(value)
ठीक काम करता है।
कोशिश करें Double.isNaN()
:
सही है अगर यह दोहरा मान एक नॉट-ए-नंबर (NaN) है, तो गलत है।
ध्यान दें कि [ double.isNaN()
] काम नहीं करेगा, क्योंकि अनबॉक्स्ड डबल्स में उनके साथ जुड़े तरीके नहीं होते हैं।
Double.isNan()
और नहीं double.IsNan()
, है ना?
यदि कोई मान के माध्यम से परिमित है, तो आप जाँच करने पर भी विचार कर सकते हैं Double.isFinite(value)
। Java 8 के बाद से Double
क्लास में एक नया तरीका है जहाँ आप एक बार में चेक कर सकते हैं कि कहीं वैल्यू NaN और इनफिनिटी तो नहीं है।
/**
* Returns {@code true} if the argument is a finite floating-point
* value; returns {@code false} otherwise (for NaN and infinity
* arguments).
*
* @param d the {@code double} value to be tested
* @return {@code true} if the argument is a finite
* floating-point value, {@code false} otherwise.
* @since 1.8
*/
public static boolean isFinite(double d)
आप NaN का उपयोग करके देख सकते हैं var != var
। NaN
नहीं के बराबर है NaN
।
EDIT : यह संभवतः अब तक की सबसे खराब विधि है। यह भ्रामक है, पठनीयता के लिए भयानक है, और समग्र रूप से बुरा व्यवहार है।
isNan
पठनीयता के लिए बेहतर है, लेकिन यह काम करता है, है ना? और यह isNan
तरीका जांचने के लिए इसका उपयोग करता है NaN
।
isNaN
यह हुड के तहत करता है, लेकिन यह कैसे काम करता है? कैसे कुछ अपने आप नहीं के बराबर होता है ??
शुरुआती को व्यावहारिक उदाहरणों की आवश्यकता है। इसलिए निम्न कोड का प्रयास करें।
public class Not_a_Number {
public static void main(String[] args) {
// TODO Auto-generated method stub
String message = "0.0/0.0 is NaN.\nsimilarly Math.sqrt(-1) is NaN.";
String dottedLine = "------------------------------------------------";
Double numerator = -2.0;
Double denominator = -2.0;
while (denominator <= 1) {
Double x = numerator/denominator;
Double y = new Double (x);
boolean z = y.isNaN();
System.out.println("y = " + y);
System.out.println("z = " + z);
if (z == true){
System.out.println(message);
}
else {
System.out.println("Hi, everyone");
}
numerator = numerator + 1;
denominator = denominator +1;
System.out.println(dottedLine);
} // end of while
} // end of main
} // end of class