title image


Smiley Gleitkommazahl vom nach Gültigkeit prüfen - wie?
Ich habe zB eine Zahl vom Typ Extended, sagen wir mal "x", die wurde mit var x:extended; deklariert.

Die Zahl lade ich mir Read aus einer Binärdatei / aus einem Buffer.



Ist die Zahl gültig, dann ist alles Ok,

wenn aber im Buffer ungültiger Inhalt ist, dann wirft sogar die Anweisung

x:=x*1; eine Exception mit EInvalidOp, auch bei FloatToStr(x) oder FloatToText() gibts ne Exception.



Nun, wie kann ich prüfen? Beispielcode, was ich meine:

procedure Test;

const

good :PChar = #$00#$00+#$00#$00+#$A4#$05+#$2C#$93+#$1D#$40; //=1234567890

bad :PChar = #$0A#$00+#$00#$00+#$94#$3F+#$40#$00+#$D0#$16; //=<Korrupter Wert>

var

x: extended;

s: string;

Buffer: array[0..63] of Char;

i: integer;

begin

Move(good[0], x, SizeOf(x)); //Wert "x" aus dem Buffer laden

s:=FloatToStr(x); //Aus der Gleitkommazahl ein String machen

showmessage('Wert "good": '+s);//Wert von "x" anzeigen



Move(bad[0], x, SizeOf(x)); //Wert "x" aus dem Buffer laden

s:=FloatToStr(x); //Wiederholen mit ungültiger Zahl -> *Boom*!

showmessage('Wert "bad": '+s); //Wert von "x" anzeigen

end;





Ich möchte, das mein Programm beim Fehler nicht unterbrochen wird, so wie ich es von

{$I-}AssignFile(f,blabla);Reset(f,1);...{$I-} her kenne, also sowas wie IsNan(x), IsInf(x)

Wie mach ich es? Ein ungültigen String in Gleitkomma umzuwandeln ohne Exception geht problemlos, indem man statt StrToFloat die Funktion TextToFloat direkt benutzt, aber wie geht das andersherum (FloatToText macht auch Exception)?

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: