![]() |
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 |
Re: Seltsame Umwandlung Variant -> Single?
Eventuell liegt es daran, wie Fließkommawerte im Computer dargestellt werden.
|
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 |
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. |
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 23:51 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-2025 by Thomas Breitkreuz