Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prüfung auf Integer oder Real (https://www.delphipraxis.net/21708-pruefung-auf-integer-oder-real.html)

evilseven 6. Mai 2004 20:16


Prüfung auf Integer oder Real
 
Hallo!

Hoff das is das richtige Forum für mein Anliegen, also ich kam jetzt erst in der 12. Klasse zum Genuss, mich ans Programmieren zu wagen und sitze jetzt als Quereinsteiger in manchen Belangen recht hilflos vor einem Projekt. Kann mir jemand einen Tipp geben, wie ich die Ergebnisse von verschiedenen Rechnungen darauf prüfen kann, ob sie vom Typ Integer oder Real bzw ob es ganze Zahlen oder Brüche sind?

alcaeus 6. Mai 2004 20:22

Re: Prüfung auf Integer oder Real
 
Also:
Delphi-Quellcode:
if Trunc(Zahl) = Zahl then
  ShowMessage('Integer')
else
  ShowMessage('Real');
Trunc gibt dir den Teil vor dem Komma, und wer der gleich der Zahl ist, naja, dann ist es ein Integer

fkerber 6. Mai 2004 20:24

Re: Prüfung auf Integer oder Real
 
Hi!

Was wäre mit einem Real wie 13,0?

Ciao fkerber

alcaeus 6. Mai 2004 20:26

Re: Prüfung auf Integer oder Real
 
Den kann man ja als Integer ansehen, oder etwa nicht? 13,0 besitzt eigentlich keinen Nachkommateil, deshalb kann der Wert als Integer angesehen werden.

fkerber 6. Mai 2004 20:28

Re: Prüfung auf Integer oder Real
 
Hi!

Naja ne Typumwandlung geht dann aber schief oder geht das tortzdem?

Ciao fkerber

dizzy 6. Mai 2004 20:32

Re: Prüfung auf Integer oder Real
 
Erstmal herzlich willkommen in der DP! :bounce1:


@alcaeus (edit: bezogen auf dein 1. Posting): Naja nicht wirklich. Ein Real-Wert kann durchaus auch 2.0000... sein. Es könnte also passieren, dass der Vergleich (nicht notwendigerweise) true ergibt. Der Wert wäre zwar identisch, der Typ aber noch lange nicht.

Aber wenn man weiss, was man proggt, so kommt man garnicht erst in die Verlegenheit dies prüfen zu müssen.

Wenn es aber darum geht zu prüfen, ob ein String (Edit-Feld o.ä.) einen Real- oder Integerwert enthält, so ließe sich mit "val" arbeiten.

Beispiel:
Delphi-Quellcode:
var float: double;
    int,
    code: integer;
begin
// Prüfung ob Integer
  val('6,123', int, code);
  if code <> 0 then ShowMessage('Ist kein Integer')
  else ShowMessage('Ist ein Integer');

// oder Prüfung auf float:
  val('6,123', float, code);
  if code <> 0 then ShowMessage('Ist kein Float')
  else ShowMessage('Ist ein Float');
end;
Müsste so gehen. Hab "val" noch nie angewendet - hoffentlich hab ich die Hilfe da richtig verstanden ;)

alcaeus 6. Mai 2004 20:32

Re: Prüfung auf Integer oder Real
 
Delphi-Quellcode:
var
  a: Real;
  b: Integer;
begin
  a := 13.0;
  b := Integer(a);
end;
Zitat:

Zitat von Delphi 7 Compiler
Invalid Typecast

Also, es muss immer mit Trunc gearbeitet werden

alcaeus 6. Mai 2004 20:35

Re: Prüfung auf Integer oder Real
 
@dizzy: Entweder gleich oder nicht gleich..und wenn 12 Stellen hinter dem Komma noch ne 1 steht dann stimmt der Vergleich nicht mehr. Die Eingabe kann übrigens auch so geprüft werden:
Delphi-Quellcode:
var float: double;
    int: integer;
    s: String;
begin
// Prüfung ob Float
  if TryStrToFloat(s, float) then
    ShowMessage('Ist ein Float')
  else
    ShowMessage('Ist kein Float');

// Prüfung ob Integer
  if TryStrToInt(s, int) then
    ShowMessage('Ist ein int')
  else
    ShowMessage('Ist kein int');
end;

dizzy 6. Mai 2004 20:41

Re: Prüfung auf Integer oder Real
 
Jahaaaa... Dass der Wert gleich ist, das mag ja sein. Aber es geht (wenn ich das jetzt nicht völlig falsch verstanden hab) um den Typ :!:

Aber dass es TryStrToInt/Float gibt, datt wusste ich noch garnet. Wie komfortabel :)

alcaeus 6. Mai 2004 20:43

Re: Prüfung auf Integer oder Real
 
Zitat:

Zitat von evilseven
ob sie vom Typ Integer oder Real bzw ob es ganze Zahlen oder Brüche sind?

Also, für mich bedeutet ganze Zahl immer noch ein Wert vom Typ Integer, und ein Bruch einen Wert vom Typ Double.

evilseven 6. Mai 2004 21:00

Re: Prüfung auf Integer oder Real
 
Das ging ja schnell, ich bin begeistert ^^

Also der Val-Befehl funktioniert einwandfrei, den hab ich ja auch schonmal benutzt, allerdings konnte ich den hier nicht anwenden, da ich das Ergebnis der Rechnungen in ne real-Variable speichern musste und der das dann nicht mehr auf Integer prüft. Der trunc-Befehl funktionierte aber, ob da noch 0er hinter dem Komma sind macht auch nichts, da ich die Zahlen gar nicht umwandeln will, sondern eigentlich nur die Teilermengen von ganzen Zahlen ermitteln wollte.

alcaeus 6. Mai 2004 21:05

Re: Prüfung auf Integer oder Real
 
Zitat:

Zitat von evilseven
Hallo!

Sorry Ich habs komplett vergessen (:oops:), willkommen in der DP :dp:

Markus K. 6. Mai 2004 21:06

Re: Prüfung auf Integer oder Real
 
Zitat:

Zitat von alcaeus
Delphi-Quellcode:
// Prüfung ob Float
  if TryStrToFloat(s, float) then
    ShowMessage('Ist ein Float')
  else
    ShowMessage('Ist kein Float');

Was ist denn wenn s=12 ist? Dann wird doch ein falsches Ergebnis ausgegeben oder? Die 12 kann ja in einen Realwert umgewandelt werden. :wink:
Ich würde den Code etwas anders aufbauen:
Delphi-Quellcode:
var float: double;
    int: integer;
    s: String;
begin
  if TryStrToInt(s, int) // Prüfung ob Integer
  then ShowMessage('Ist ein int')
  else if TryStrToFloat(s, float) // Prüfung ob Float
       then ShowMessage('Ist ein Float')
       else ShowMessage('Ist kein Float und kein Int');
end;
Außerdem ist noch zuerwähnen das die Funktionen erst ab Delphi6 oder 7 dabei sind (weiß es jetzt nicht so genau).

Tschüß Markus

dizzy 6. Mai 2004 21:42

Re: Prüfung auf Integer oder Real
 
Zitat:

Zitat von alcaeus
Zitat:

Zitat von evilseven
ob sie vom Typ Integer oder Real bzw ob es ganze Zahlen oder Brüche sind?

Also, für mich bedeutet ganze Zahl immer noch ein Wert vom Typ Integer, und ein Bruch einen Wert vom Typ Double.

:mrgreen: Nun, hier wäre dann zu unterscheiden, ob jetzt der Wert einer Variablen ganzzahlig ist, oder ob die Variable selber vom Typ "Ganzzahl" ist. Mann mann... man kann aber auch echt aneinander vorbei reden *gg*.

Aber da hast du ja scheinbar instinktiv der richtigen Riecher gehabt. :thuimb: ;)


mfg,
dizzy


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

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