NaN, Infinity och Divide by Zero i VB.NET

Början av programmeringsböcker inkluderar vanligtvis denna varning: "Dela inte med noll! Du får ett runtime-fel!"

Saker har förändrats i VB.NET. Även om det finns fler programmeringsalternativ och beräkningen är mer exakt är det inte alltid lätt att se varför saker händer som de gör.

Här lär vi oss att hantera division med noll med hjälp av VB.NETs strukturerade felhantering. Och under vägen täcker vi också de nya VB.NET-konstanterna: NaN, Infinity och Epsilon.

Vad händer om du kör 'Divide By Zero' i VB.NET

Om du kör ett "dividera med noll" -scenario i VB.NET får du detta resultat:

 Dim a, b, c Som dubbel

 a = 1: b = 0

 c = a / b

 Console.WriteLine (_

 "Har matematikregler" _

 & vbCrLf & _

 "upphävts?" _

 & vbCrLf & _

 "Dividera med noll " _

 & vbCrLf & _

 "måste vara möjligt!") 

Så vad händer här? Svaret är att VB.NET faktiskt ger dig det matematiskt korrekta svaret. Matematiskt, du kan dela med noll, men vad du får är "oändlighet".

 Dim a, b, c Som dubbel

 a = 1: b = 0

 c = a / b

 Console.WriteLine (_

 "Svaret är: " _

 & c)

 'Visningar:

 Svaret är: oändlighet 

Värdet "oändlighet" är inte för användbart för de flesta affärsapplikationer. (Såvida inte VD undrar vad den övre gränsen för hans aktiebonus är.) Men det hindrar dina applikationer från att krascha på ett runtime-undantag som mindre kraftfulla språk gör.

VB.NET ger dig ännu mer flexibilitet genom att till och med låta dig göra beräkningar. Kolla in det här:

 Dim a, b, c Som dubbel

 a = 1: b = 0

 c = a / b

 c = c + 1

 "Infinity plus 1 är

 "fortfarande oändlighet 

För att förbli matematiskt korrekt ger VB.NET dig svaret NaN (Inte ett tal) för vissa beräkningar, t.ex. 0/0.

 Dim a, b, c Som dubbel

 a = 0: b = 0

 c = a / b

 Console.WriteLine (_

 "Svaret är: " _

 & c)

 'Visningar:

 Svaret är: NaN 

VB.NET kan också berätta skillnaden mellan positiv oändlighet och negativ oändlighet:

 Dim a1, a2, b, c Som dubbel

 a1 = 1: a2 = -1: b = 0

 Om (a1 / b)> (a2 / b) Sedan _

 Console.WriteLine (_

 "Postiv oändlighet är" _

 & vbCrLf & _

 "större än" _

 & vbCrLf & _

 "negativ oändlighet.") 

Förutom PositiveInfinity och NegativeInfinity ger VB.NET också Epsilon, det minsta positiva dubbla värdet större än noll.

Tänk på att alla dessa nya funktioner i VB.NET endast är tillgängliga med flytande punkt (dubbel eller singel) datatyper. Och denna flexibilitet kan leda till viss Try-Catch-slutlig (strukturerad felhantering) förvirring. Exempelvis körs .NET-koden ovan utan att kasta något slags undantag, så att kodning av den i ett Try-Catch-Final-block hjälper inte. För att testa för en delning med noll måste du koda ett test något som: