AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Variant-Umwandlung in Single ergibt Integer?!
Thema durchsuchen
Ansicht
Themen-Optionen

Variant-Umwandlung in Single ergibt Integer?!

Ein Thema von JamesTKirk · begonnen am 11. Jun 2006 · letzter Beitrag vom 12. Jun 2006
Antwort Antwort
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#1

Variant-Umwandlung in Single ergibt Integer?!

  Alt 11. Jun 2006, 23:38
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.


Der Code sieht (gekürzt ) 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... Des sollte doch bei einem Variant möglich sein?!

Ich hoffe auf eine erlösende Antwort und wünsche eine gute Nacht
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Variant-Umwandlung in Single ergibt Integer?!

  Alt 12. Jun 2006, 06:25
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
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Variant-Umwandlung in Single ergibt Integer?!

  Alt 12. Jun 2006, 10:46
Sers marabu!

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

MfG
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Variant-Umwandlung in Single ergibt Integer?!

  Alt 12. Jun 2006, 10:56
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
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Variant-Umwandlung in Single ergibt Integer?!

  Alt 12. Jun 2006, 11:00
D.h. ich brauch mir keine Gedanken machen, da meine XML-Datei nur '.' verwenden wird
(Ich ärger mich in einem Modellformat doch nicht noch mit ',' rum... wo sin mer denn da

Aber vielleicht werd ich den Hinweis ja mal benötigen

MfG
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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