Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Seltsame Umwandlung Variant -> Single? (https://www.delphipraxis.net/30118-seltsame-umwandlung-variant-single.html)

Cliff 20. Sep 2004 11:42


Seltsame Umwandlung Variant -> Single?
 
Hi,
ich sitze hier vor einem merkwürdigem Phänomen:

Ich möchte ein Variant in ein Float umwandeln. Das Variant wird von extern als 'Float' beschrieben (OPC). Wenn ich im Proggi einen Breakpoint setze und mir den Wert des Variants anzeigen lasse (Mauscursor 'drauf), so hat er den korrekten Wert '9.123456' (Dieser wird auch extern zugewiesen).
Wandele ich den Wert jetzt in Real, oder Single um, so nimmt er folgenden Wert an: 9.1234560013.

Innerhalb von Delphi kann ich das Original auch ruhig in ein anderes Variant übertragen. Der Wert entspricht immer dem Soll. Erst nach der Typumwandlung entsteht das falsche Ergebnis (Single:= Variant).

Was könnte da die Ursache sein???

Gruss Cliff

Luckie 20. Sep 2004 11:58

Re: Seltsame Umwandlung Variant -> Single?
 
Eventuell liegt es daran, wie Fließkommawerte im Computer dargestellt werden.

Cliff 20. Sep 2004 12:17

Re: Seltsame Umwandlung Variant -> Single?
 
Hi Luckie,
aber wie stellt er sie dar (Oder wie kann ich die Umwandlung beeinflussen)???
Der Effekt scheint wiederholbar darin zu liegen das in den letzten Nachkommastellen irgendetwas 'hinein interpretiert' wird, was im original nicht vorhanden ist.

Beispiel:
Variant nach Wandlung
8,1 > 8,10000038146973
7,2 > 7,19999980926514
6,3 > 6,30000019073486
5,4 > 5,40000009536743
4,5 > 4,5

Wie man sieht ist das Ergebnis auch leicht schwankend (Allerdings wiederholbar).
Ist es möglich das das 'Variablen watching' des Variants nicht alles anzeigt was anschliessend bei der Wandlung verwendet wird?

Gruss Cliff

Robert Marquardt 20. Sep 2004 12:33

Re: Seltsame Umwandlung Variant -> Single?
 
Bei einer Typumwandlung zwischen Single, Double und Extended gibt es gerne kleine Unterschiede im Wert.
Das ist unvermeidlich, da jeder der Typen einen anderen endlichen Ausschnitt der Realzahlen darstellt.
Vermutlich nimmt Variant gar keinen Single auf und daher kommt es zu einer Umwandlung.

Cliff 20. Sep 2004 12:46

Re: Seltsame Umwandlung Variant -> Single?
 
Hi,
die Überprüfung des Variants mit der Funktion 'VarIsFloat' gibt mir ein True zurück.
Witzigerweise zeigt mir die IDE (Watch) immer den richtigen Wert an.
Solange ich nur mit Varianten arbeite (Habe mal testweise von einer Variant zu anderen übertragen) wird auch immer der korrekte Wet angezeigt. Nur bei der Umwandlung geschehen merkwürdige Dinge...

Gruss Cliff


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz