Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - mit Variabeln rechnen


Cyberbob - Mi 09.10.02 18:38
Titel: mit Variabeln rechnen
HI ihr,

hab gerade einen totalen Blackout. Ich lese aus einer Ini Datei zahlen aus und speichere diese, wie das so üblich ist, als variablen ab.( integerwert)
und nun will ich mit ihnen rechnen. Es sieht so aus:

var1:=meinePunkte/gesammte punkte

das geht aber cniht und ich bekomme einen Fehler -Incompatible types integer and Extended.

Was mache ich falsch?

Cyberb :P b


SMI - Mi 09.10.02 19:00

Aus der Fehlermeldung schließe ich, dass Var1 als Integer(GanzeZahl), und entweder meinePunkte und/oder gesammelte punkte ein Extended(Kommazahl) ist.

Wenn var1 ein Integer Wert, ist musst du mit div Teilen, oder mit / Teilen und Runden alternativ hast du die Bedeutung von Integer und Extended vertauscht, wenn Var1 eine Kommalzahl speichern soll.

SMI


Cyberbob - Mi 09.10.02 19:13

hi ihr,

hmm, also var1 soll ja eine Kommazahl werden, wie muss ich das dann richtig machen? Einen Extendtypen kenne ich nciht...


Cyberb :P b


SMI - Mi 09.10.02 19:26

Folgende Werte sind Fließkommawerte:

Real 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
Extended 3.4 x 10^-4932 .. 1.1 x 10^4932 19-20 10
Comp -2^63+1 .. 2^63 -1 19-20 8
Currency -922337203685477.5808.. 922337203685477.5807 19-20 8


Folgende sind Ganzezahlen

Smallint -32768..32767 16 Bit einschließlich Vorzeichen
Longint -2147483648..2147483647 32 Bit einschließlich Vorzeichen
Byte 0..255 8 Bit, besitzt kein Vorzeichen
Word 0..65535 16 Bit, besitzt kein Vorzeichen
Integer -2147483648..2147483647 32 Bit einschließlich Vorzeichen
Cardinal 0..2147483647 32 Bit, besitzt kein Vorzeichen


Wenn das Ergebnis var1 eine Fließkommazahl sein soll must du so rechnen
var1 muss eine Fließkommazahl sein, daher auch die Compiler Meldung, dass eine Integer(Ganzzahl) inkompatibel zu eime extended=Fließkommazahl, weil er nicht weiß, was mit den Kommas Stellen zu tun ist.

Quelltext
1:
2:
3:
4:
5:
6:
7:
VAR
  var1 :extended;
  meinepunkte: integer;
  gesammtepunkte: integer;
BEGIN
  var1:=  meinepunkte / gesammtepunkte;
END;

Wenn das Ergebnis eine Genzezahl sein soll rechnest du so

Quelltext
1:
2:
3:
4:
5:
6:
7:
VAR
  var1 :integer;
  meinepunkte:extended;
  gesammtepunkte: extended;
BEGIN
  var1:=  ROUND(meinepunkte / gesammtepunkte);
END;

Wenn alle Werte Genzsahlen sind rechnet man so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
VAR
  var1 :integer;
  meinepunkte: integer;
  gesammtepunkte: integer;
BEGIN
  var1:=  meinepunkte div gesammtepunkte;
END;


SMI

(10.10.02 09:09 Tino) Code-Tags hinzugefügt.


Cyberbob - Mi 09.10.02 20:12

Ja danke super, jetzt rechnet er zumindest schon mal, aber kann ich auch bestimmen, das er nur 2 Stellen hinter dem Komma anzeigt?

Ich dachte an Extended[4] aber das klappt irgendiwe nicht.

Gibt es da ne Lösung für?


Cyberb 8) b


SMI - Mi 09.10.02 20:24


Quelltext
1:
2:
3:
4:
5:
Var test:extended;
begin
  test:=1/3;
  showmessage(FloatToStrF(test,ffFixed, 18, 2));
end;


SMI

(10.10.02 09:10 Tino) Code-Tags hinzugefügt.