Entwickler-Ecke

Sonstiges (Delphi) - Extended To Integer


theFlash - Mo 22.12.03 15:43
Titel: Extended To Integer
Hi @ all!

Hat einer ne Idee, wie man Variablen vom Typ Extended in eine Variable vom Typ Integer umwandelt, oder besser gesagt, den Inhalt einer extended Variable in eine Integer Variable zu bekommen?

Vielen Dank für jede Hilfe!!!


Chatfix - Mo 22.12.03 15:52

Müsste mit Round gehen, kannst ja mal die Hilfe dazu anguggn...


Delphi-Quelltext
1:
Integer := Round(Extended);                    


Anonymous - Mo 22.12.03 15:52

extended ist ein Fließkommaformat und integer ein Ganzzahlformat, also musst du die Zahl runden. Das geht mit round und trunc.


theFlash - Mo 22.12.03 16:23

Danke für die schnellen Antworten!
Habe es jetzt schon mit Round, Floor, Ceil und Trunc probiert.

Jedes mal kommt ein Fehler : EInvalidOp - Ungültige Gleitkommaoperation.


Anonymous - Mo 22.12.03 16:34

Wie sieht denn dein Quellcode aus?


r0fel.xls - Mo 22.12.03 17:01

könnte es sein, dass du statt einem punk ein komma als trennzeichen hast ???
oder andersrum :roll:

... ich weiß nichmehr genau aber eins von beidem mag delphi beim umwandeln nicht


theFlash - Mo 22.12.03 17:02

Hier ist der Abschnitt, in dem der Fehler liegt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
    zwischen := StrToInt(bst);//bst ist eine Zahl, aber als String
    zwischen3 := zwischen;//zwischen ist ein Integer, zwischen3 ein extended
    zwischen4 := e;// zwischen4 ist ein extended, e ist ein integer

    zwischen5 := power(zwischen3,zwischen4);//zwischen5 ist ein extended
    rest := Round(zwischen5) mod n;//n ist ein integer, rest auch


In diesem Beispiel ist jetzt mal round da.


Anonymous - Mo 22.12.03 17:23

In welcher Zeile kommt der Fehler?


theFlash - Mo 22.12.03 18:15

In der letzten Zeile.

Delphi-Quelltext
1:
  rest := Round(zwischen5) mod n;                    


Wie gesagt: EInvalidOp - Ungültige Gleitkommaoperation

Zusatzinfos: Die Zahl zwischen5 ist ziemlich groß, eigentlich sogar größer als Integer glaube ich.


BungeeBug - Mo 22.12.03 18:51

Hi,

das würde erklären das es nicht geht :) Deswegen auch die Exception das die Operation ungültig ist.

Jetzt müsstes du "nur" sicher stellen das das wirklich der Grund ist.

Zustatzinfo:

Quelltext
1:
2:
3:
4:
ShortInt : -128 ... 127
SmallInt : -32768 ... 32767 [Standart Int]
LongInt : -2147483648 ... 2147483647
Int64 : -2^63 ... 2^63-1


theFlash - Mo 22.12.03 20:28

Daran würd es wohl liegen. Und ich habe dan das Problem, dass ich ja auch noch den Modulo ausrechnen muss, dazu brauche ich eine Integer-Form, aber die sind alle zu klein, für meine Zahl, die dabei rauskommt.

Gibt es irgendeine Möglichkeit, den modulo aus einer extended oder real-Zahl auszurechnen ? Ich könnte das ja per Hand machen, indem ich ausprobiere, bei welchem faktor (z.B. j) die Zahl größer ist, und dann den Rest ausrechnen:


Delphi-Quelltext
1:
2:
3:
4:
5:
j := 0;
repeat
  inc(j);
  rest:=zahl-(j*n);
until n*(j+1)>zahl;


Aber hier kommt kommt ein Fehler wegen den Datentypen, weil "zahl" eine extended ist und rest ein integer ist.