![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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