Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit StrToFloatDev + if-Abfrage (https://www.delphipraxis.net/129898-probleme-mit-strtofloatdev-if-abfrage.html)

Kirby886 27. Feb 2009 13:07


Probleme mit StrToFloatDev + if-Abfrage
 
Moin zusammen!

Erstmal ein dickes Lob an das Forum. Bin noch recht neu in der Delphi-Programmierung und das Forum ist echt eine große Hilfe. :)

Zu meinem Problem:

Ich hab die folgende Funktion mit zwei Strings als Parameter, die ich jeweils in Double umwandeln möchte. Sollte dies nicht möglich sein, so bekommt die jeweilige Double-Variable eine Gleitkommazahl mit einer Länge zugewiesen, die die maximal mögliche Länge des übergebenen Strings übersteigt.

So weit, so gut. Aber irgendwas stimmt mit meiner if-Abfrage nicht: Denn wenn ich z.B. Buchstaben übergebe erhalten die Double-Variablen zwar korrekt diese 0.00000000000009, aber ich komme trotzdem nicht in den if-Block, sondern in den else-Block. Also wo ist mein Denkfehler? :gruebel:

Delphi-Quellcode:
function TCalcControl.getResult(inSValue1, inSValue2: String): String;
var lDValue1, lDValue2: Double;
begin
  lDValue1 := StrToFloatDef(inSValue1, 0.00000000000009);
  lDValue2 := StrToFloatDef(inSValue2, 0.00000000000009);
  if ((lDValue1 = 0.00000000000009) or (lDValue2 = 0.00000000000009)) then result := 'Bitte nur Zahlen eingeben!'
  else [...]
end;

Klaus01 27. Feb 2009 13:12

Re: Probleme mit StrToFloatDev + if-Abfrage
 
Hallo,

die Zahlen werden intern immer binär darstellt.
Es kann also sein das 0.00000009 nicht so exakt dargestellt werden können.
Was Du machen kannst ist auf value <=0.0000009 zu prüfen.

Grüße
Klaus

Sir Rufo 27. Feb 2009 13:20

Re: Probleme mit StrToFloatDev + if-Abfrage
 
Benutze Delphi-Referenz durchsuchenTryStrToFloat

Kirby886 27. Feb 2009 13:35

Re: Probleme mit StrToFloatDev + if-Abfrage
 
Zitat:

Zitat von Klaus01
die Zahlen werden intern immer binär darstellt.
Es kann also sein das 0.00000009 nicht so exakt dargestellt werden können.
Was Du machen kannst ist auf value <=0.0000009 zu prüfen.

Hab auch schon an eine ungenaue interne Darstellung gedacht, kam mir trotzdem bissl komisch vor.
value <= 0.0000009 wär nicht gegangen, da ich ggf. auch eine 0 eingeben möchte! ;)


Zitat:

Zitat von Sir Rufo

Damit klappt's super!


Danke euch beiden. Schönes Wochenende! :thumb:

alex517 27. Feb 2009 14:09

Re: Probleme mit StrToFloatDev + if-Abfrage
 
Für den Vergleich gebrochener Zahlen oder DateTime
solltest du dir mal folgende Funktionen ansehen:
Delphi-Quellcode:
 
function SameValue()
function IsZero()
function CompareValue()
alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf