Real-Zahlen
Real-Zahlen
Kann man zwei real zahlen mit einernader vergleichen
z.B.
var Edit1, Edit2 :real;
If Edit1 = Edit2
then....
oder geht das nur bei integer zahlen?
z.B.
var Edit1, Edit2 :real;
If Edit1 = Edit2
then....
oder geht das nur bei integer zahlen?
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Real-Zahlen
so:
1) Ja das geht so, und dein Beispiel ist komplett richtig,
ABER
2) Benutze bitte den Highlighter
3) hat der Thread "Real und Integer" nicht die selbe Fragestellung ?
4) Ich vermute mal das du den Text zweier Editfelder miteinander Vergleichen kann.
Dann solltest du wissen Editfelder besitzen mehrere Eigenschaften, zum beipsiel eine Position, eine breite, eine Farbe und den Text.
Den Text fragt man mit Edit1.Text ab.
5) schau dir mal die Tutorials an:
http://delphi-treff.de/tutorials/grundlagen/" onclick="window.open(this.href);return false;
1) Ja das geht so, und dein Beispiel ist komplett richtig,
ABER
2) Benutze bitte den Highlighter
3) hat der Thread "Real und Integer" nicht die selbe Fragestellung ?
4) Ich vermute mal das du den Text zweier Editfelder miteinander Vergleichen kann.
Dann solltest du wissen Editfelder besitzen mehrere Eigenschaften, zum beipsiel eine Position, eine breite, eine Farbe und den Text.
Den Text fragt man mit Edit1.Text ab.
Code: Alles auswählen
var
a,b:integer;
begin
a := StrtoFloat(Edit1.Text);
b := StrtoFloat(Edit2.Text);
if a = b then { hier steht was, ohne die Komentarklammern :) } ;
end;
// @edit: Dieser Code enthält einen kleinen Fehler, dieser ist aber schnell gefunden ...
http://delphi-treff.de/tutorials/grundlagen/" onclick="window.open(this.href);return false;
Zuletzt geändert von MAC am Di 5. Jun 2012, 21:38, insgesamt 1-mal geändert.
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: Real-Zahlen
Hallo MicSc,
ich weiß nicht, warum Du Deine Real Variablen Edit1 und Edit2 genannt hast. Vielleicht hast Du ja etwas verwechselt: Wenn Du zwei Edit Felder auf Dein Formular ziehst, kriegst Du genau diese Namen, aber die sind nicht vom Typ Real, sondern TEdit. Edit1 ist dabei immer verschieden von Edit2. Es handelt sich um Komponenten, u.a. mit einem Feld z.B. Edit1.Text . Da drin steht ein String. Auch Strings lassen sich vergleichen. Aber '01.1' ist im String Vergleich verschieden von '1.1'. Daher hat MAC schon die Umwandlung mit StrToFloat() vorgeschlagen.
Und jetzt kommt die nächste Feinheit: Wenn die Mathematik zweimal dieselbe Kommazahl ausrechnet, dann tut das der Prozessor noch lange nicht. Denn 1.1 ist im Binärsystem ein unendlicher Bruch und es kommt zu Rundungsfehlern. Du solltest also beim Vergleich kleine Rundungen zulassen, z.B.oder
oder ähnlich. Welcher Vergleich treffender ist, kommt dabei auf die Art Deiner Berechnung an und bei a/b musst Du noch auf Division durch 0 aufpassen.
Gruß
Heiner
ich weiß nicht, warum Du Deine Real Variablen Edit1 und Edit2 genannt hast. Vielleicht hast Du ja etwas verwechselt: Wenn Du zwei Edit Felder auf Dein Formular ziehst, kriegst Du genau diese Namen, aber die sind nicht vom Typ Real, sondern TEdit. Edit1 ist dabei immer verschieden von Edit2. Es handelt sich um Komponenten, u.a. mit einem Feld z.B. Edit1.Text . Da drin steht ein String. Auch Strings lassen sich vergleichen. Aber '01.1' ist im String Vergleich verschieden von '1.1'. Daher hat MAC schon die Umwandlung mit StrToFloat() vorgeschlagen.
Und jetzt kommt die nächste Feinheit: Wenn die Mathematik zweimal dieselbe Kommazahl ausrechnet, dann tut das der Prozessor noch lange nicht. Denn 1.1 ist im Binärsystem ein unendlicher Bruch und es kommt zu Rundungsfehlern. Du solltest also beim Vergleich kleine Rundungen zulassen, z.B.
Code: Alles auswählen
if abs(a - b) < 1e-10 then
Label1.Caption := 'Das gilt als gleich'
else
Label1.Caption := 'Das gilt als ungleich';
Code: Alles auswählen
if abs(a/b - 1) < 1e-10 then
Label1.Caption := 'Das gilt als gleich'
else
Label1.Caption := 'Das gilt als ungleich';
Gruß
Heiner
Re: Real-Zahlen
Danke für eure Hilfe 
Aber wenn ich die Variablem mit interger definiere, kann ich nicht FloatToStr oder StrToFloat schreiben.

Aber wenn ich die Variablem mit interger definiere, kann ich nicht FloatToStr oder StrToFloat schreiben.
-
- Beiträge: 109
- Registriert: Sa 1. Mär 2008, 15:19
- OS, Lazarus, FPC: openSUSE Leap 15.6 (FPC 3.2.2) / Windows 11 Pro (FPC 3.2.2)
- CPU-Target: x64
- Kontaktdaten:
Re: Real-Zahlen
Ja, weil dann heißt esMicSc hat geschrieben:Danke für eure Hilfe
Aber wenn ich die Variablem mit interger definiere, kann ich nicht FloatToStr oder StrToFloat schreiben.
Code: Alles auswählen
StrToInt
Code: Alles auswählen
IntToStr

Mit besten Grüßen,
Cybermonkey
Cybermonkey
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Real-Zahlen
Richtig, ich habe ein Fehler gemacht, aber die Lösung hast du doch gerade selbst angesprochenMicSc hat geschrieben:Danke für eure Hilfe
Aber wenn ich die Variablem mit interger definiere, kann ich nicht FloatToStr oder StrToFloat schreiben.

Also versuch am besten selber dieses kleine Problem zu lösen, so lernt man am besten...
Code: Alles auswählen
Signatur := nil;