Delphi-PRAXiS
Seite 1 von 3  1 23      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr.
Seite 1 von 3  1 23      

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