كيف يمكنك الاختبار لمعرفة ما إذا كانت المزدوجة تساوي نان؟
سؤال
لدي مزدوجة في جاوة وأريد التحقق مما إذا كان كذلك NaN
وبعد ما هي أفضل طريقة للقيام بذلك؟
المحلول
استخدام ثابت Double.isNaN(double)
الطريقة، أو الخاص بك Double
'س .isNaN()
طريقة.
// 1. static method
if (Double.isNaN(doubleValue)) {
...
}
// 2. object's method
if (doubleObject.isNaN()) {
...
}
ببساطة القيام:
if (var == Double.NaN) {
...
}
يكون غير كافية بسبب كيف معيار IEEE لأرقام نقطة نان والعائمة ويعرف.
نصائح أخرى
يحاول Double.isNaN()
:
إرجاع TRUE إذا كانت هذه القيمة المزدوجة هي رقم غير موجود (NAN)، خطأ خلاف ذلك.
لاحظ أن [double.isNaN()
] لن تعمل، لأن مضاعفات Unboxed لا تحتوي على طرق مرتبطة بها.
قد ترغب في التفكير في التحقق من ذلك ما إذا كانت القيمة محدودة عبر Double.isFinite(value)
. وبعد منذ جافا 8 هناك طريقة جديدة في Double
فئة حيث يمكنك التحقق مرة واحدة إذا كانت القيمة ليست نان وانهاية.
/**
* 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)
يمكنك التحقق من نان باستخدام var != var
. NaN
لا يساوي NaN
.
تعديل: ربما يكون هذا إلى حد بعيد أسوأ طريقة. انها مربكة، فظيعة للقراءة، والممارسة السيئة الشاملة.
المبتدئين يحتاجون أمثلة عملية. لذلك جرب التعليمات البرمجية التالية.
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
سيساعد مقتطف التعليمات البرمجية أدناه في تقييم النوع البدائي الذي يحمل نان.
double dbl = Double.NaN;
Double.valueOf(dbl).isNaN() ? true : false;