![]() |
Zahlen mit Komma vergleichen
Hallo,
ich habe diese Funktion:
Delphi-Quellcode:
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.
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; Danke Counter |
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; |
Re: Zahlen mit Komma vergleichen
Multipliziere doch die Summe einfach mit 100 und vergleiche mit dem Hundertfachen.
|
Re: Zahlen mit Komma vergleichen
Zitat:
|
Re: Zahlen mit Komma vergleichen
Hi,
Ich habs so gemacht. Also so ähnlich wie es schon gesagt wurde.
Delphi-Quellcode:
Gruß
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; Neutral General |
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 |
Re: Zahlen mit Komma vergleichen
Hi,
das kann auch nicht gehen, weil du schreibst:
Delphi-Quellcode:
Denn so werden erst die Kommastellen abgeschnitten und dann mit 100 multipliziert. Als Beispiel mit 1,77:
trunc(summe)*100
trunc(1,77) = 1 1*100 = 100 != 177 Du musst zuerst mit 100 multiplizieren und dann die Stellen abschneiden. |
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 |
Re: Zahlen mit Komma vergleichen
kenn zwar die aufgabe nicht. aber ist schon merkwürdig, dass heut alle mit 10 gleitkomma zahlen handieren ... ;-)
Zitat:
|
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. |
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
|
Re: Zahlen mit Komma vergleichen
Zitat:
Gruß Neutral General |
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?
|
Re: Zahlen mit Komma vergleichen
Du musst die Unit Math bei den uses einbinden.
|
Re: Zahlen mit Komma vergleichen
ähh wie wo? kann ich auch math.floor schreiben??
|
Re: Zahlen mit Komma vergleichen
Zitat:
ganz oben in der Unit steht irgendwo sowas wie
Delphi-Quellcode:
da schreibst du einfach noch Math dazu:
uses Windows, Messages, ...
Delphi-Quellcode:
Gruß
uses Windows, Messages, ... , Math;
Neutral General |
Re: Zahlen mit Komma vergleichen
Zitat:
|
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 |
Re: Zahlen mit Komma vergleichen
Zitat:
Kannst Du gleichzeitig Text eingeben und andere Beiträge währenddessen lesen??? |
Re: Zahlen mit Komma vergleichen
Zitat:
|
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 |
Re: Zahlen mit Komma vergleichen
Und hier noch mal, warum das so ist:
![]() |
Re: Zahlen mit Komma vergleichen
Zitat:
|
Re: Zahlen mit Komma vergleichen
Ja, das ist im Prinzip auch das Gleiche, nur mit einer anderen Tolleranz.
|
Re: Zahlen mit Komma vergleichen
@ Luckie toller Link, wenn er gehen würde.
|
Re: Zahlen mit Komma vergleichen
Bei mir geht er.
|
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