Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variant-Umwandlung in Single ergibt Integer?! (https://www.delphipraxis.net/71250-variant-umwandlung-single-ergibt-integer.html)

JamesTKirk 11. Jun 2006 23:38


Variant-Umwandlung in Single ergibt Integer?!
 
Sers mitnand!

Ich habe das interessante Problem, dass ein Variant (Inhalt: 0.75 Typ: varOleStr) aus einer XML-Datei, der in einen Single umgewandelt werden soll, in einen Integer mit dem Wert 75 umgewandelt wird.
:wiejetzt:

Der Code sieht (gekürzt :mrgreen: ) so aus:

Delphi-Quellcode:
var
  Vector:TD3DXVector3 //Ein Record mit den Single-Elementen x,y und z
  Attrib:Variant;
  DS:Char;
begin
  DS:=DecimalSeparator;
  DecimalSeparator:='.';
  //herausgeschnittenes, erfolgreiches Auslesen von 0.75 und Setzen von Attrib
  if not VarIsNull(Attrib) then
   Vector.x:=Attrib;
  //selbiges für Vector.y und Vector.z
  //und noch ein paar Überprüfungen
  DecimalSeparator:=DS;
end;
Wie man sieht ändere ich sogar den DecimalSeparator auf '.' um, doch das hilft auch nichts... auch VarAsType(Attrib,varSingle) bleibt ohne Erfolg... :cry: Des sollte doch bei einem Variant möglich sein?! :gruebel:

Ich hoffe auf eine erlösende Antwort und wünsche eine gute Nacht :zwinker:
Sven

marabu 12. Jun 2006 06:25

Re: Variant-Umwandlung in Single ergibt Integer?!
 
Guten Morgen Sven,

die Routinen zur Umwandlung von Varianten sind lokalisierte API Funktionen - sie verwenden die aktuellen locale settings des Systems, aber nicht die Einstellungen der Delphi Unit SysUtils. Bessere Chancen hast du mit Val():

Delphi-Quellcode:
function NativeStrToFloat(s: String): Extended;
var
  error: Integer;
begin
  Val(s, Result, error);
  if error > 0 then
    raise EConvertError.CreateFmt('invalid float format: %s', [s]);
end;
Getippt und nicht getestet.

Grüße vom marabu

JamesTKirk 12. Jun 2006 10:46

Re: Variant-Umwandlung in Single ergibt Integer?!
 
Sers marabu!

Danke! Der Code hat wunderbar funktioniert! :thumb:
Nur eine Frage: Muss man da auf den DecimalSeparator achten?! :gruebel:

MfG

marabu 12. Jun 2006 10:56

Re: Variant-Umwandlung in Single ergibt Integer?!
 
Ja, musst man. Val() arbeitet grundsätzlich mit dem Punkt als Dezimalpunkt, weswegen ich im Beispiel die Vorsilbe Native verwendet habe. Sobald in deinem XML-Dokument lokalisierte Angaben stehen, sind andere Vorgehensweisen angebracht.

marabu

JamesTKirk 12. Jun 2006 11:00

Re: Variant-Umwandlung in Single ergibt Integer?!
 
D.h. ich brauch mir keine Gedanken machen, da meine XML-Datei nur '.' verwenden wird :zwinker:
(Ich ärger mich in einem Modellformat doch nicht noch mit ',' rum... wo sin mer denn da :mrgreen:

Aber vielleicht werd ich den Hinweis ja mal benötigen :thumb:

MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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