NaN, Infinity in razdelite z ničlo v VB.NET

click fraud protection

Začetne programske knjige običajno vključujejo to opozorilo: "Ne delij na nič! Prikaže se napaka med izvajanjem! "

Stvari so se spremenile VB.NET. Čeprav jih je več programiranje možnosti in izračun je bolj natančen, ni vedno enostavno razumeti, zakaj se stvari dogajajo tako, kot se dogajajo.

Tukaj se naučimo, kako ravnati z delitvijo po ničli s strukturiranim ravnanjem z napakami VB.NET. Ob poti pa pokrivamo tudi nove konstante VB.NET: NaN, Infinity in Epsilon.

Kaj se zgodi, če v VB.NET izvajate »Divide By Zero«

Če v VB.NET zaženete scenarij "loči na nič", dobite ta rezultat:

 Dim a, b, c Kot dvojno

 a = 1: b = 0

 c = a / b

 Konzola. WriteLine (_

 "Imeti matematična pravila" _

 & vbCrLf & _

 "je bil razveljavljen?" _

 & vbCrLf & _

 "Razdelitev na nič" _

 & vbCrLf & _

 "mora biti možno!") 

Kaj se torej dogaja tukaj? Odgovor je, da vam VB.NET dejansko daje matematično pravilen odgovor. Matematično, ti lahko delite z ničlo, toda to, kar dobite, je "neskončnost".

 Dim a, b, c Kot dvojno

 a = 1: b = 0

 c = a / b

 Konzola. WriteLine (_

 "Odgovor je:" _

 & c)

 'Prikaže:

 „Odgovor je: neskončnost 

instagram viewer

Vrednost "neskončnost" ni preveč uporabna za večino poslovnih aplikacij. (Razen če se izvršni direktor sprašuje, kakšna je zgornja meja njegovega osnovnega bonusa.) Vendar to preprečuje, da bi se vaše aplikacije zrušile med izjemo izvajanja, kot to počnejo manj močni jeziki.

VB.NET vam omogoča še večjo prilagodljivost, saj vam celo omogoča izvajanje izračunov. Poglej to:

 Dim a, b, c Kot dvojno

 a = 1: b = 0

 c = a / b

 c = c + 1

 „Neskončnost plus 1 je

 'še vedno neskončnost 

Če želite ostati matematično pravilen, vam VB.NET odgovori na NaN (Ne število) za nekatere izračune, kot je 0/0.

 Dim a, b, c Kot dvojno

 a = 0: b = 0

 c = a / b

 Konzola. WriteLine (_

 "Odgovor je:" _

 & c)

 'Prikaže:

 „Odgovor je: NaN 

VB.NET lahko pove tudi razliko med pozitivno neskončnostjo in negativno neskončnostjo:

 Dim a1, a2, b, c Kot dvojni

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

 Če (a1 / b)> (a2 / b) Potem _

 Konzola. WriteLine (_

 "Postivna neskončnost je" _

 & vbCrLf & _

 "večji kot" _

 & vbCrLf & _

 "negativna neskončnost.") 

Poleg PositiveInfinity in NegativeInfinity VB.NET ponuja tudi Epsilon, najmanjšo pozitivno dvojno vrednost, večjo od nič.

Upoštevajte, da so vse te nove zmogljivosti VB.NET na voljo samo s podatkovnimi tipi s plavajočo vejico (Double ali Single). In ta prilagodljivost lahko privede do nekaj zmešnjave Try-Catch-End (strukturirano ravnanje z napakami). Na primer, zgornja koda .NET deluje brez vrnitve kakršnih koli izjem, zato ga kodiranje znotraj bloka Try-Catch-končno ne bo pomagalo. Če želite preizkusiti delitev na nič, morate preskusiti nekaj podobnega:

 Če c. ToString = "Neskončnost" Potem... 

Tudi če kodirate program (z uporabo vrste Integer namesto vrst Single ali Double), še vedno dobite izjemo "Overflow", ne pa izjeme "Divide by Zero". Če v spletu iščete drugo tehnično pomoč, boste opazili, da vsi primeri preizkušajo OverflowException.

.NET dejansko ima DivideByZeroException kot zakonito vrsto. Če pa koda nikoli ne sproži izjeme, kdaj boste kdaj videli to nedopustno napako?

Ko boste videli DivideByZeroException

Kot se izkaže, MicrosoftStran MSDN o blokih Try-Catch-končno uporablja primere delitve na nič, da ponazori, kako jih kodirati. Vendar obstaja tanka "ulov", ki je ne razlagajo. Njihova koda izgleda tako:

 Zatemnite kot celo število = 0

 Dim b kot celo število = 0

 Dim c kot celo število = 0


 Poskusite

 a = b \ c

 Lovi eks kot izjemo

 Konzola. WriteLine ("Prišlo je do napake med izvajanjem")

 Končno

 Konzola. ReadLine ()

 Končaj poskus 

Ta koda naredi sproži dejanski delitev z ničelno izjemo.

Toda zakaj ta koda sproži izjemo in nič, kar smo pred tem kodirali? In kaj Microsoft ne razlaga?

Opazite, da je operacija, ki jo uporabljajo ne deliti ("/"), to je celo število deliti ("\")! (Drugi Microsoftovi primeri spremenljivke dejansko označujejo kot Integer.) Kot kaže, je izračun celih števil samo primeru, ki dejansko vrže to izjemo. Bilo bi lepo, če bi Microsoft (in druge strani, ki kopirajo kodo) pojasnil to malo podrobnosti.

instagram story viewer