Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zahlen mit Komma vergleichen (https://www.delphipraxis.net/103171-zahlen-mit-komma-vergleichen.html)

turbocounter 11. Nov 2007 18:56


Zahlen mit Komma vergleichen
 
Hallo,
ich habe diese Funktion:
Delphi-Quellcode:
function praemientester(summ1,summ2:double):boolean;
var summe: double;
begin
  summe:=summ1 + summ2;
  If (summe = 0.11) or (summe = 0.33) or (summe = 0.55) or (summe = 0.77) or
     (summe = 0.99)or (summe = 1.11) or (summe = 1.33) or (summe = 1.55) or
     (summe = 1.77) or (summe = 1.99)Then Result:=True
                                   Else Result:=False;

end;
Warum liefert sie nie true zurück? Selbst wenn die Summe 0,11 ist, dann funktioniert das nicht. Liegt das an den Datentypen/Gleitkommadarstellung? Wie ändere ich das oder wie nehme ich nur die Zahlen nach dem Komma und mach dann mit den integer zahlen ne addition. Mit frac() funktionierts nicht, da bleibt die 0 stehen.

Danke
Counter

DeddyH 11. Nov 2007 18:59

Re: Zahlen mit Komma vergleichen
 
Wie in meiner PN beschrieben, könnte es so gehen:
Delphi-Quellcode:
function praemientester(summ1,summ2:double):boolean;
var summe: double;
begin
  summe:=summ1 + summ2;
  Result := trunc(summe * 100) in [11,33,55,77,99,111,133,155,177,199];
end;

hathor 11. Nov 2007 19:02

Re: Zahlen mit Komma vergleichen
 
Multipliziere doch die Summe einfach mit 100 und vergleiche mit dem Hundertfachen.

DeddyH 11. Nov 2007 19:06

Re: Zahlen mit Komma vergleichen
 
Zitat:

Zitat von hathor
Multipliziere doch die Summe einfach mit 100 und vergleiche mit dem Hundertfachen.

Siehe #2 ;)

Neutral General 11. Nov 2007 19:10

Re: Zahlen mit Komma vergleichen
 
Hi,

Ich habs so gemacht. Also so ähnlich wie es schon gesagt wurde.

Delphi-Quellcode:
function Nachkomma(R: Single): Integer;
begin
  Result := Round(R*100 - Floor(R)*100);
end;

function IsPair(x1,x2: Single): Boolean;
begin
  Result := Nachkomma((NachKomma(x1) + Nachkomma(x2)) /100) in [11,33,55,77,99];
end;
Gruß
Neutral General

turbocounter 11. Nov 2007 19:30

Re: Zahlen mit Komma vergleichen
 
Danek euch, Deddy das von dir geht leider nicht, auch nicht das geänderte:
Delphi-Quellcode:
function praemientester(summ1,summ2:double):boolean;
var summe: double;
begin
  summe:=summ1 + summ2;
  If (trunc(summe) * 100) = 77
   Then
   Result:=True;
end;

ich probiermal das vom General

Namenloser 11. Nov 2007 19:34

Re: Zahlen mit Komma vergleichen
 
Hi,

das kann auch nicht gehen, weil du schreibst:
Delphi-Quellcode:
trunc(summe)*100
Denn so werden erst die Kommastellen abgeschnitten und dann mit 100 multipliziert. Als Beispiel mit 1,77:
trunc(1,77) = 1
1*100 = 100 != 177
Du musst zuerst mit 100 multiplizieren und dann die Stellen abschneiden.

DGL-luke 11. Nov 2007 19:37

Re: Zahlen mit Komma vergleichen
 
Benutzt für Finanzmathematik doch bitte den Datentyp Currency, der immer genau 4 Nachkommanstellen hat.

Alle Fließkommadatentypen sind immer von Rundungsproblemen betroffen.

EDIT: Ach ja, das stinkt gefährlich nach BWInf Afg.1

grenzgaenger 11. Nov 2007 20:01

Re: Zahlen mit Komma vergleichen
 
kenn zwar die aufgabe nicht. aber ist schon merkwürdig, dass heut alle mit 10 gleitkomma zahlen handieren ... ;-)
Zitat:

98.30
55.88
9.64
83.96
35.88
7.64
73.82
54.85
63.07
3.98

turbocounter 11. Nov 2007 20:06

Re: Zahlen mit Komma vergleichen
 
warum funktioniert der Quelltext im Post von DeddyH nicht?
Man kann wahrscheinlich keine doubles vergleichen.

General, dein Quelltext geht bei mir nicht, des sagt das Floor ein nich deklarierter Bezeichner ist.

turbocounter 11. Nov 2007 20:07

Re: Zahlen mit Komma vergleichen
 
@ grenzgaenger hast dus jetzt endlich gecheckt dass das ne aufgabe von bundeswettbewerb ist? Und warum heute alle damit nerven, kann ich dir auch sagen: morgen ist einsendeschluss. :P

Neutral General 11. Nov 2007 20:11

Re: Zahlen mit Komma vergleichen
 
Zitat:

Zitat von turbocounter
@ grenzgaenger hast dus jetzt endlich gecheckt dass das ne aufgabe von bundeswettbewerb ist? Und warum heute alle damit nerven, kann ich dir auch sagen: morgen ist einsendeschluss. :P

Naja aber ich glaube ich kann dir sagen das du die Aufgabe bis morgen nicht fertig bekommst wenn du an dem Teil hängst. herauszufinden ob zwei Preise ein Pärchen bilden ist das geringste Problem der Aufgabe. Und auch das einfachste... Und ich wäre dir auch dankbar, das wenn du deine Aufgaben noch abschicken willst nicht meinen Quelltext so übernimmst. Ich hab ihn mal gepostet weil ich dir keine große Chancen gebe das bis morgen noch zu schaffen.

Gruß
Neutral General

turbocounter 11. Nov 2007 20:13

Re: Zahlen mit Komma vergleichen
 
sag mir doch mal warum dein quelltext bei mir nicht geht wenn ich ihn so übernehme? Doch das ist mein Problem, die perutationen der Artikel aufzustellen war dagege ein klax, ich komm nur nicht klar mit den datentypen in delphi. Also bite hilf mir bei meinem letztel teilziel, ich schreibe deinen quelltext auch um, aber wenn du selber nicht weißt warum der bei mir nicht geht, weißt du warum das von DeddyH nicht geht?

Neutral General 11. Nov 2007 20:14

Re: Zahlen mit Komma vergleichen
 
Du musst die Unit Math bei den uses einbinden.

turbocounter 11. Nov 2007 20:15

Re: Zahlen mit Komma vergleichen
 
ähh wie wo? kann ich auch math.floor schreiben??

Neutral General 11. Nov 2007 20:24

Re: Zahlen mit Komma vergleichen
 
Zitat:

Zitat von turbocounter
die perutationen der Artikel aufzustellen war dagege ein klax

Aber du weißt nicht wie man Units einbindet.. Ah ja..

ganz oben in der Unit steht irgendwo sowas wie

Delphi-Quellcode:
uses Windows, Messages, ...
da schreibst du einfach noch Math dazu:

Delphi-Quellcode:
uses Windows, Messages, ... , Math;
Gruß
Neutral General

Khabarakh 11. Nov 2007 21:09

Re: Zahlen mit Komma vergleichen
 
Zitat:

Zitat von Neutral General
Aber du weißt nicht wie man Units einbindet.. Ah ja..

Permutationen sind bei der Aufgabe auch alles andere als der Wahrheit letzter Schluss :zwinker: *mörderalgorithmusvonaufgabe2weiterdokumentier*.

turbocounter 11. Nov 2007 22:33

Re: Zahlen mit Komma vergleichen
 
nein weiß ich nicht ich bin nicht so kein delphi freak.
Danke ich hab das schon gefunden mit der Unit. Als euch dann viel Spass in der zweiten Runde und Danke für eure Hilfe

TC

hathor 11. Nov 2007 23:13

Re: Zahlen mit Komma vergleichen
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von hathor
Multipliziere doch die Summe einfach mit 100 und vergleiche mit dem Hundertfachen.

Siehe #2 ;)

KLUGSCHEISSER!!!
Kannst Du gleichzeitig Text eingeben und andere Beiträge währenddessen lesen???

Neutral General 12. Nov 2007 11:55

Re: Zahlen mit Komma vergleichen
 
Zitat:

Zitat von hathor
Zitat:

Zitat von DeddyH
Zitat:

Zitat von hathor
Multipliziere doch die Summe einfach mit 100 und vergleiche mit dem Hundertfachen.

Siehe #2 ;)

KLUGSCHEISSER!!!
Kannst Du gleichzeitig Text eingeben und andere Beiträge währenddessen lesen???

Sonst ist alles in Ordnung ja? Komm mal runter Junge... :roll:

Bomberbb 12. Nov 2007 12:21

Re: Zahlen mit Komma vergleichen
 
Ich würde nicht auf Gleichheit testen. Denn es kann sein, dass in hinterster Dezimalstelle ein Unterschied ist.

Ich teste generell so:
abs(summe-0.77)<1e-4 //anstatt summe = 0.77

Gruß

Sascha

Luckie 12. Nov 2007 12:27

Re: Zahlen mit Komma vergleichen
 
Und hier noch mal, warum das so ist: Prüfe Fließkommazahlen nie auf Gleichheit!

DeddyH 12. Nov 2007 13:19

Re: Zahlen mit Komma vergleichen
 
Zitat:

Zitat von turbocounter
warum funktioniert der Quelltext im Post von DeddyH nicht?
Man kann wahrscheinlich keine doubles vergleichen.

Eben deshalb multipliziere ich sie erst mit 100, um die ersten beiden Nachkommastellen im Vergleich mit einzubeziehen und wandele sie dann mit trunc in integers. Ich bin mir ziemlich sicher (auch ohne Test), dass es funktionieren würde, sobald Du die Klammern richtig setzt.

Bomberbb 12. Nov 2007 13:26

Re: Zahlen mit Komma vergleichen
 
Ja, das ist im Prinzip auch das Gleiche, nur mit einer anderen Tolleranz.

turbocounter 12. Nov 2007 13:50

Re: Zahlen mit Komma vergleichen
 
@ Luckie toller Link, wenn er gehen würde.

DeddyH 12. Nov 2007 13:51

Re: Zahlen mit Komma vergleichen
 
Bei mir geht er.

turbocounter 12. Nov 2007 20:06

Re: Zahlen mit Komma vergleichen
 
hm ja jetzt bei mir auch


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 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-2025 by Thomas Breitkreuz