I Java innebörden av NaN är Inte ett nummer och den finns i java.lang.Double och java.lang.Float klasser. Det är ett speciellt värde som representerar ett odefinierat numeriskt värde. Vi kan stöta på NAN i matematiska beräkningar där resultatet är odefinierat.
- Om vi försöker beräkna kvadratroten ur ett negativt Math.sqrt(-1) kommer det att returnera NaN eftersom kvadratroten ur ett negativt tal är odefinierad.
- Om vi försöker dividera noll med noll kommer det också att returnera NaN.
Exempel:
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)); } }
Produktion
NaN NaN NaN
Ibland matte inte vettigt det är därför NaN finns. Istället för att kasta fel returnerar Java helt enkelt NaN för att visa att något är fel.
Hur skapar man NaN?
Med hjälp av Dubbel eller Flyta klasser kan vi skapa ett NAN.
dubbel n = dubbel.NaN; // Använda Double
float n = Float.NaN; // Använda Float
Hur jämför man NaN-värden?
NaN är oordnade betyder det att varje jämförelse med NaN kommer att returnera falskt. Om vi jämför NaN med en annan NaN eller om vi använder relationsoperatorer kommer resultatet alltid att vara falskt. Nu ska vi diskutera hur NaN fungerar i olika scenerier.
1. Relationella operatörer och NaN
- De numeriska jämförelseoperatorerna< <= >och >= returnerar alltid falskt om endera eller båda operanderna är NaN.
- Likhetsoperatorn == returnerar falskt om endera operanden är NaN.
- Olikhetsoperatorn != returnerar sant om endera operanden är NaN.
Exempel:
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); } }
Produktion
Check if equal :false Check if unequal: true Check if equal: false Check if unequal: true false false
2. isnN() Bröder
Denna metod används för att kontrollera att ett värde är NaN.
Exempel:
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()); } }
Produktion
NaN = true -Infinity = false
3. Flytande typ ger inget undantag när man arbetar med matematiska värden
NaN följer IEEE 754 flyttal standard. IEEE 754 Flyttal kan representera positiv eller negativ oändlighet och NaN. Dessa tre värden härrör från beräkningar vars resultat är odefinierat eller inte kan representeras korrekt. Java följer kända matematiska fakta. 1.0 / 0.0 är oändlighet men de andra är obestämda former som Java representerar som NaN (inte ett tal).
Exempel:
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); } }
Produktion
Infinity -Infinity InfinitySkapa frågesport