كيف يمكنك الاختبار لمعرفة ما إذا كانت المزدوجة تساوي نان؟

StackOverflow https://stackoverflow.com/questions/1456566

  •  12-09-2019
  •  | 
  •  

سؤال

لدي مزدوجة في جاوة وأريد التحقق مما إذا كان كذلك 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;

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top