Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wieso lässt sich double in integer nicht umwandeln? (https://www.delphipraxis.net/19091-wieso-laesst-sich-double-integer-nicht-umwandeln.html)

Virchov 29. Mär 2004 11:41


Wieso lässt sich double in integer nicht umwandeln?
 
Warum sagt der Compiler "ungültige Typenumwandlung" hier? iForm ist ein integer, Angle ist ein Double.
Es MUSS doch gehen, oder?

Danke

Delphi-Quellcode:
iFrom:= integer(Angle)- 45;
:gruebel: :wall: :kotz:

Luckie 29. Mär 2004 11:43

Re: Wieso lässt sich double in integer nicht umwandeln?
 
Kuck mal in der Hilfe unter Trunc, Round oder Int. Je nach dem, was du brauchst.

Cuchulainn 29. Mär 2004 11:44

Re: Wieso lässt sich double in integer nicht umwandeln?
 
Double (8 Byte) ist viel größer als Integer (32 Bit). Außerdem würden, wenn es gehen würde, die Nachkommastellen abgeschnitten werden, da Integer ein Ganzzahltyp ist.

Daniel 29. Mär 2004 11:57

Re: Wieso lässt sich double in integer nicht umwandeln?
 
@Virchov:
Ich denke, Du solltest mal in Ruhe ein Delphi Grundlagen-Tutorial durchlesen. Ich bin mir sicher, daß Du danach schneller vorwärtskommen wirst.

Virchov 29. Mär 2004 13:01

Re: Wieso lässt sich double in integer nicht umwandeln?
 
:oops: :oops: :oops: :oops:

himitsu 29. Mär 2004 13:26

Re: Wieso lässt sich double in integer nicht umwandeln?
 
Zitat:

Zitat von Cuchulainn
Double (8 Byte) ist viel größer als Integer (32 Bit). Außerdem würden, wenn es gehen würde, die Nachkommastellen abgeschnitten werden, da Integer ein Ganzzahltyp ist.

Also die Umwandlung selber funktioniert, es werden halt nur die höheren 4 Bytes abgeschnitten, aber da die Werte in einem anderen Format gespeichert sind, kommt nur nicht das erwartete raus.


z.B.:
Delphi-Quellcode:
I: LongInt{Integer}; {4 Byte}
S: Single;          {4 Byte}
W: LongWord;        {4 Byte}
B: Byte;            {1 Byte}

I := Integer(S);
I := Integer(W);
I := Integer(B); {das einzige, was mal geht ^^}
B := Byte(I);
Word zu Integer würde gehn, aber nur solange der Wert in Word maximal 2.147.483.647 ist.
Sobald der Wert größer ist, stimmt es nichtmehr

Integer zu Byte geht auch nur im Bereich von 0 bis 255.

Und bei Single stimmt überhaupt nicht's mehr. Denn Typenumwandlungen dieser art wird nicht der Wert (im Speicher) geändert.

jbg 29. Mär 2004 13:30

Re: Wieso lässt sich double in integer nicht umwandeln?
 
Hier muss man aufpassen, denn z.B. der FreePascal Compiler fügt z.B. bei "Integer(DoubleVar)" Compiler-Magic ein. Delphi macht das nicht und somit wird auf Byte-Ebene gecastet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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 by Thomas Breitkreuz