Autor |
Beitrag |
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Mo 05.03.07 17:21
Hallo,
Ich bräuchte eine Funktion, die mir angibt, ob ein Real- bzw. Extended-Ausdruck eine ganze Zahl ist. Leider hab ich keine Funktion gefunden bei Delphi. Kann man sowas vllt mit if Frac(x) = 0.0000000000000 then Result := True; realisieren?
Oder gibt es da doch schon was fertiges?
Danke schon mal!
Zuletzt bearbeitet von Jakob Schöttl am Mo 05.03.07 17:34, insgesamt 1-mal bearbeitet
|
|
Calculon
      
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: Mo 05.03.07 17:28
Naja, du könntest z.B. folgenden Umweg gehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
|
str := floattostr(x); try int := strtoint(str); result := true; except result := false; end; |
oder so ähnlich.
Gruß
Calculon
--
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mo 05.03.07 17:29
Wie wäre es mit FRAC
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Mo 05.03.07 17:34
|
|
Calculon
      
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: Mo 05.03.07 17:57
Hi nochmal,
hab' grad was ausprobiert und scheint auch zu klappen. Vielleicht gefällt dir das ja besser:
Delphi-Quelltext 1: 2:
| if round(strtofloat(edit1.text)) <> strtofloat(edit1.Text) then showmessage('FLOATING VALUE') else ShowMessage('INTEGER VALUE'); |
Gruß
Calculon
--
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Mo 05.03.07 17:58
 Öööhm ... ich kann euch inhaltlich - glaube ich - nicht ganz folgen. Aber folgendes funktioniert doch: Delphi-Quelltext 1: 2:
| if Frac(x) = 0 then IchBinGanz := true; | //Nachtrag: Es funktioniert mit der diesen Funktionen zugrunde liegenden Ungenauigkeiten. 5,0000000000000001 würde er als Ganzzahl erkennen. //Nachtrag 2: Und eigentlich wollte ich mich ja gar nicht selbst quoten, sondern mein Vorposting nur editieren. Ich muss langsam Feierabend machen ..... Moderiert von jasocul: Beiträge zusammengefasst
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Mo 05.03.07 18:31
IngoD7 hat folgendes geschrieben: | Delphi-Quelltext 1: 2:
| if Frac(x) = 0 then IchBinGanz := true; |
... mit Ungenauigkeiten ... |
Aber ich glaube ich nehme dann doch diese Funktion, weil solche Ungenauigkeiten treten wahrscheinlich bei FloatToStr auch auf.
Dann siehts also so aus:
Delphi-Quelltext 1: 2: 3: 4:
| function IstGanzeZahl(x: extended): Boolean; begin if Frac(x) = 0 then result := True else Result := False; end; |
Gut, Danke mal wieder an alle!
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mo 05.03.07 19:47
So wäre es kürzer
Delphi-Quelltext 1: 2: 3: 4:
| function IstGanzeZahl(x: extended): Boolean; begin Result := Frac(x) = 0; end; |
und so wäre es genauer
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| function IstGanzeZahl(x: extended): Boolean; const Epsilon = 1E-10; begin Result := ABS(Frac(x)(<Epsilon; end; |
//EDIT: ABS hinzugefügt
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
Zuletzt bearbeitet von Kroko am Mi 07.03.07 08:35, insgesamt 2-mal bearbeitet
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Mo 05.03.07 20:02
Ich muss jetzt weg kann die genauen Befehle also gerade nicht raussuchen.
Aber In FPU runden FPRDINT irgendwieso und dann vergleichen und Flags setzen oder halt eax als resultat einer Funktion
FCOMIP dürte da sehr hilfreich sein.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 07.03.07 03:30
@Kroko: Fast richtig ...
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| function IstGanzeZahl(x: extended): Boolean; const Epsilon = 1E-10; begin Result := Abs(Frac(x))<Epsilon; end; |
Ansonsten meint er -5.25 ist eine Ganzzahl 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 07.03.07 06:30
//EDIT: Abs gehört mit rein, reisen Denkfehler 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|