Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "if größer als" Frage (https://www.delphipraxis.net/122766-if-groesser-als-frage.html)

sunrise 21. Okt 2008 21:29


"if größer als" Frage
 
Hallo

Hätte da noch eine Frage. Ich möchte mein Program nach einer Art counter steuern.
Z.b. wenn LabeL1 eine Zahl über 10 enthält wird eine Prozedur gestartet bzw. ändert sich was.
Wenn die Zahl in LabeL1 über 20 ist start: xxx

Was wäre nun sinnvoller?

Methode 1.)

If Label1.caption = 10 then xxx
else
xxx
if Label1.caption = 20 then xxx
else

oder
Methode 2.)

if x>10 then ...
else
...

if x>20 then ...
else
...



eigentlich würde beides gehen aber jamand sagte mir mal das es bei =zahl zu Problemen kommen kann. Ich würde eure Meinung mal gern hören. sry für die anfänger fragen

mkinzler 21. Okt 2008 21:40

Re: "if größer als" Frage
 
Label.Caption ist ein String und 10 ein Integer. Du kannst verschiedene Typen nicht miteinenader vergleichen

alzaimar 21. Okt 2008 21:41

Re: "if größer als" Frage
 
Es gibt unterschiedliche Datentypen in Delphi, so wie in fast jeder anderen Programmiersprache: Texte, Wahrheitswerte, Ganzzahlen und Kommazahlen. Das Problem des Vergleiches auf Gleichheit betrifft nur Kommazahlen, weil die im Computer nicht notwendigerweise 100% genau dargestellt werden. Warum, ist hier egal.

Denn Du arbeitest eh nur mit ganzen Zahlen, und da kann man auf Gleichheit prüfen. Nur bei unterschiedlichen Datentypen ist das so eine Sache, weil pingelig gesehen der Text '10' (Eins-Null) nichts mit der Zahl 10 zu tun hat. Deswegen kann man die auch nicht vergleichen. Wenn man aber den einen Datentypen in den anderen umwandelt, geht das schon.

Delphi-Quellcode:
If Label1.Caption = 10 Then BlaBla; // Klappt nicht und wird vom Compiler schon bemängelt.
If Label1.Caption = IntToStr(10) Then BlaBla; // Geht, weil die Zahl 10 mit Hilfe der Funktion 'IntToStr' in einen Text umgeandelt wird.
If StrToInt(Label1.Caption)=10 then BlaBla; // Geht, aber nur wenn Label1.Caption in eine Ganzzahl umgewandelt werden kann
Sei mir nicht böse, aber ich glaube, Du solltest Dir ein Buch über die Anfänge mit Delphi besorgen. Oder einen "Crashkurs Delphi" durcharbeiten. Such mal hier oder bei Google, da gibt es etwas!

Zu Deiner eigentlichen Frage: Trenne Funktion und Darstellung. Ein Zähler ist eine Ganzzahl und wie Du sie darstellst, ist erstmal egal. Du zählst also und vergleichst den Zähler mit 10,20 usw. Das geht problemlos. Damit man auch etwas sieht, stellst Du die Zahl irgendwie dar. Ein TLabel-Objekt eignet sich ganz gut, es könnten aber auch Bildchen sein. Das bleibt Dir überlassen.

Uwe Raabe 21. Okt 2008 21:41

Re: "if größer als" Frage
 
Zitat:

Zitat von sunrise
If Label1.caption = 10 then xxx

Das wird so eh nicht gehen: Label1.Caption ist ein string und den kann man nicht so ohne weiteres mit einer Zahl vergleichen. Also entweder

Delphi-Quellcode:
if Label1.Caption = '10' then
oder

Delphi-Quellcode:
if StrToInt(Label1.Caption) = 10 then
Zitat:

Zitat von sunrise
aber jamand sagte mir mal das es bei =zahl zu Problemen kommen kann.

Das ist nur bedingt richtig: Man kann ganze Zahlen auf Gleichheit testen, aber bei reellen Zahlen sollte man eine gewisse Ungenauigkeit zulassen.

Delphi-Quellcode:
var
  i, j: Integer;
  a, b: Extended;
begin
  ...
  if i = j then // das geht wunderbar
  ...
  if a = b then // das mach Probleme und sollte daher besser etwa so lauten
  if Abs(a - b) < 0.001 then // wobei für die 0.001 je nach Situation variiert werden kann


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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