Saya memiliki dobel di Jawa dan saya ingin memeriksa apakah ada NaN. Apa cara terbaik untuk melakukan ini?
Saya memiliki dobel di Jawa dan saya ingin memeriksa apakah ada NaN. Apa cara terbaik untuk melakukan ini?
Jawaban:
Gunakan statis Double.isNaN(double)metode, atau Anda Double's .isNaN()metode.
// 1. static method
if (Double.isNaN(doubleValue)) {
...
}
// 2. object's method
if (doubleObject.isNaN()) {
...
}
Cukup melakukan:
if (var == Double.NaN) {
...
}
adalah tidak cukup karena bagaimana standar IEEE untuk NaN dan nomor floating point didefinisikan.
Double.isNaN should be (true) jawaban yang bagus
value == Double.NaNtidak berfungsi, tetapi Double.isNaN(value)berfungsi dengan baik.
Coba Double.isNaN():
Mengembalikan nilai true jika nilai ganda ini adalah Not-a-Number (NaN), false jika tidak.
Perhatikan bahwa [ double.isNaN()] tidak akan berfungsi, karena dobel tanpa kotak tidak memiliki metode yang terkait dengannya.
Double.isNan()dan tidak double.IsNan(), bukan?
Anda mungkin ingin mempertimbangkan juga memeriksa apakah suatu nilai terbatas Double.isFinite(value). Karena Java 8 ada metode baru di Doublekelas di mana Anda dapat memeriksa sekaligus jika nilai bukan NaN dan tak terbatas.
/**
* 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)
Anda dapat memeriksa NaN dengan menggunakan var != var. NaNtidak sama NaN.
EDIT : Ini mungkin metode yang paling buruk. Ini membingungkan, mengerikan untuk dibaca, dan praktik buruk secara keseluruhan.
isNanlebih baik untuk dibaca, tetapi berfungsi, bukan? Dan isNanmetode ini menggunakan ini untuk memeriksa NaN.
isNaNapakah ini di bawah tenda, tetapi bagaimana cara kerjanya? Bagaimana sesuatu yang tidak sama dengan dirinya sendiri ??
Pemula membutuhkan contoh-contoh praktis. jadi coba kode berikut.
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