logo

NaN (no és un nombre) a Java

En Java el significat de NaN és No és un número i és present a java.lang.Doble i java.lang.Float classes. És un valor especial que representa un valor numèric no definit. Ens podem trobar amb NAN en càlculs matemàtics on el resultat no està definit.

comparet java
  • Si intentem calcular l'arrel quadrada d'un nombre negatiu Math.sqrt(-1) retornarà NaN perquè l'arrel quadrada d'un nombre negatiu no està definida.
  • Si intentem dividir zero per zero, també retornarà NaN.

Exemple:

Java
// Java Program to demonstrates NAN // Define a class public class Geeks {  // main method  public static void main(String[] args)  {  System.out.println(2.0 % 0.0);  System.out.println(0.0 / 0.0);  System.out.println(Math.sqrt(-1));  } } 

Sortida
NaN NaN NaN 

De vegades matemàtiques no té sentit per això existeix NaN. En lloc de llançar errors, Java simplement torna NaN per mostrar que alguna cosa no funciona.



Com crear NaN?

Amb l'ajuda de Doble o Flota classes podem crear una NAN.

doble n = Doble.NaN; // Utilitzant Double

float n = Float.NaN; // Utilitzant Float

Com comparar els valors de NaN?

NaN no estan ordenats, vol dir que qualsevol comparació amb NaN tornarà falsa. Si comparem NaN amb un altre NaN o estem utilitzant operadors relacionals, el resultat sempre serà fals. Ara parlarem de com funciona NaN en diferents escenaris.

1. Operadors relacionals i NaN

  • Els operadors de comparació numèrica< <= >i >= sempre retornen fals si algun o ambdós operands són NaN.
  • L'operador d'igualtat == retorna fals si qualsevol dels operands és NaN.
  • L'operador de desigualtat != retorna cert si qualsevol dels operands és NaN.

Exemple:

Java
// Java program to test relational operator on NaN public class Geeks {  public static void main(String[] args)  {  // comparing NaN constant field defined in  // Float Class  System.out.print('Check if equal :');  System.out.println(Float.NaN == Float.NaN);    System.out.print('Check if unequal: ');  System.out.println(Float.NaN != Float.NaN);  // comparing NaN constant field defined in Double Class  System.out.print('Check if equal: ');  System.out.println(Double.NaN == Double.NaN);    System.out.print('Check if unequal: ');  System.out.println(Double.NaN != Double.NaN);  // More Examples  double NaN = 2.1 % 0;  System.out.println((2.1%0) == NaN);  System.out.println(NaN == NaN);  } } 

Sortida
Check if equal :false Check if unequal: true Check if equal: false Check if unequal: true false false 


2. isnN() Germans

Aquest mètode s'utilitza per comprovar si un valor és NaN.

Exemple:

Java
// Demonstrating isNaN() import java.lang.*; // Created a class public class Geeks {  // main method  public static void main(String[] args)  {  Double x = new Double(-2.0/0.0);  Double y = new Double(0.0/0.0);      // returns false if this Double value is not a Not-a-Number (NaN)   System.out.println(y + ' = ' + y.isNaN());    // returns true if this Double value is a Not-a-Number (NaN)   System.out.println(x + ' = ' + x.isNaN());    } }  

Sortida
NaN = true -Infinity = false 


3. El tipus flotant no produeix excepcions mentre opera amb valors matemàtics

NaN segueix el IEEE 754 de coma flotant estàndard. IEEE 754 Els nombres de coma flotant poden representar infinitat positiu o negatiu i NaN. Aquests tres valors sorgeixen de càlculs el resultat dels quals no està definit o no es pot representar amb precisió. Java segueix fets matemàtics coneguts. 1.0 / 0.0 és infinit, però les altres són formes indeterminades que Java representa com a NaN (no un nombre).

Exemple:

Java
// Demonstrating output of floating // point number operations public class Geeks {  public static void main(String[] args)  {  System.out.println(2.0 / 0);  System.out.println(-2.0 / 0);  System.out.println(9.0E234 / 0.1E-234);  } } 

Sortida
Infinity -Infinity Infinity 
Crea un qüestionari