Forum: PC-Programmierung VB.net Fehlerbehandlung mit Exceptions


von Schimmelreiter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

beim Testen von Exceptions komme ich nicht weiter.
Das Programm rechnet mit den Eingabewerten von 0,0 für spannung und 
leistung und bringt in leistung den Wert -1,#IND . Was erst mal richtig 
ist.

Dieser Wert wird auf lblP1 ausgegeben. Das dürfte aber nicht sein, das 
Programm müsste zu    Catch ex As OverflowException   verzweigen.
                            lblP1.Text = "Error"

Was mache ich falsch?

Schönen Gruß

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Schimmelreiter schrieb:
> Das dürfte aber nicht sein
Wieso nicht? Wo steht, dass das nicht sein darf? Bei FP Zahlen kann man 
sehr wohl diese Ergebisse erhalten und auch eingeschränkt mit ihnen 
weiterrechen.

von Schimmelreiter (Gast)


Lesenswert?

Läubi .. schrieb:
> Wo steht, dass das nicht sein darf?

Wenn ich eine Division durch Null simuliere, dann muss doch in Catch 
verzweigt werden, oder? Alle Beispielschnipsel die man so findet(Bücher, 
Internet) behaupten das jedenfalls ;)

von Peter II (Gast)


Lesenswert?

Schimmelreiter schrieb:
> Wenn ich eine Division durch Null simuliere, dann muss doch in Catch
> verzweigt werden, oder?
kann durchaus sein, aber eine Division durch 0 wirft bestimmt eine ander 
exception als OverflowException

von Schimmelreiter (Gast)


Lesenswert?

Peter II schrieb:
> bestimmt eine ander exception als OverflowException

Ja, richtig, es ist 'Catch ex As DivideByZeroException'

Aber selbst diese funktioniert nicht.

von ... (Gast)


Lesenswert?

Schau mal hier:
http://msdn.microsoft.com/en-us/library/25bswc76.aspx

Insbesondere unter "Attempted Division by Zero"
Geht wohl nur für den Datentyp Decimal.
Außerdem wind meines Wissens die FP-Exceptions normalerweise 
ausgeschaltet. Keine Ahnung, wie man die bei VB einschaltet. Für C/C++ 
gehts so:
http://msdn.microsoft.com/en-us/library/c9676k6h%28VS.100%29.aspx
http://msdn.microsoft.com/en-us/library/45ec64h6.aspx


PS:
http://msdn.microsoft.com/en-us/library/system.dividebyzeroexception.aspx
Unter "Remarks":
1
Dividing a floating-point value by zero will result in either positive
2
infinity, negative infinity, or Not-a-Number (NaN) according to the
3
rules of IEEE 754 arithmetic. Floating-point operations never throw
4
an exception. For more information, see Single and Double.

von Schimmelreiter (Gast)


Lesenswert?

... schrieb:
> Schau mal hier:

Ja, besten Dank für deine Erklärung!

Nachdem ich drei Tage die Lösung des Problems im Internet gesucht habe, 
finde ich bei mir im Regal das Buch: "Visual Basic 2008, Einstieg für 
Anspruchsvolle" von Jürgen Kotz, Verlag Addison-Wesley, ISBN 
978-3-8279-2595-2. Auf Seite 83(Werfen einer Ausnahme) finde ich eine 
Erklärung: Selbst wenn in der Textbox "0" steht so wird bei 
Fließkommazahlen mit einer Annäherung nach Null gerechnet, was zum 
Ergebniss +unendlich oder -unendlich führt.
Bei Integer Divisionen ist hingegen die Textbox-Null auch eine 
mathematische Null.

Als Lösung schlägt der Autor folgendes vor:

If txtNenner.Text = "0" Then
   Throw New DivideByZeroException()
End If

Mit dem Schlüsselwort Throw wird hier eine eigene Ausnahme ausgelöst.

Ob das so funktioniert hab ich nicht ausprobiert da ich schon eine 
'Heimlehrgangsprogrammiererlösung' ;) geschrieben habe:

If txtStrom.Text = "0" Then lblStrom.Text = "Error"

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Schimmelreiter schrieb:
> da ich schon eine
> 'Heimlehrgangsprogrammiererlösung' ;) geschrieben habe
Und wenn du jetzt den Benutzer mit einer etwas diffizileren Meldung als 
"Error" beglückst hat er möglicherweise auch die Chance etwas dagegen zu 
unternehmen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.