Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Hilfe: Fehler beim casten ... StrToFloat(...) (https://www.delphipraxis.net/67896-hilfe-fehler-beim-casten-strtofloat.html)

winx 21. Apr 2006 15:03


Hilfe: Fehler beim casten ... StrToFloat(...)
 
Hallo,

ich habe ein riesen Problem und weiss echt mich mehr was ich
ändern soll.

Ich frag über eine COM Schnittstelle eine Funktion ab und will dann den dort
zurückgegebenen Wert in eine Float Zahl casten:

Delphi-Quellcode:
function TObjectPropertiesHandler.getObjectLeft(): double;
var str : string;
begin
  try
    DecimalSeparator := '.'; //Hab auch schon versucht DecimalSeparator := ','; oder die Zeile auskommentiert
    str := getObjectProperty('LEFT'); //'str: String "23.2961992136304"'
    result := StrToFloat(str);//Exception wird geschmissen
  except
    on E:Exception do begin
      Console.WriteLine(E.Message); //Exception._message: String "'23.2961992136304' ist kein gültiger Gleitkommawert"
      raise E;
    end;
  end;
end;
Egal was ich mache, wie ich den Decimalseperator setze, dieser Fehler kommt immer, dabei ist der Wert doch gültig...

Was läuft da falsch???

Danke,
winx

inherited 21. Apr 2006 15:12

Re: Hilfe: Fehler beim casten ... StrToFloat(...)
 
Hi,
Kommentier doch das mit dem '.'-Setzen mal aus und Ändere einfach via

->StrReplace

den '.' in ein ','

€dit: du hast den Thread 2mal erstellt

mkinzler 21. Apr 2006 15:14

Re: Hilfe: Fehler beim casten ... StrToFloat(...)
 
Oder versuchs durch Verändern der Konstante DecimalSeparator ( weiß nicht ob das in Delphi.Net vorhanen ist, sollte aber)

inherited 21. Apr 2006 15:17

Re: Hilfe: Fehler beim casten ... StrToFloat(...)
 
Das hat er doch versucht, afair

mirage228 21. Apr 2006 15:27

Re: Hilfe: Fehler beim casten ... StrToFloat(...)
 
Hi,

StrToFloat() hat eine überladene Variante, die den Parameter FormatSettings akzeptiert.
Schau Dir das mal an :)

mfG
mirage228

winx 24. Apr 2006 07:27

Re: Hilfe: Fehler beim casten ... StrToFloat(...)
 
Also ich habe jetzt alles gemacht.

Die doppelten " hab ich dazugefügt, der String sieht ganz normal aus.

Selbst wenn ich den String hart kodiere also so:

Delphi-Quellcode:
function TObjectPropertiesHandler.getObjectLeft(): double;
var str,str2 : string;
    ds:TFormatsettings;
    i : integer;
begin
  try
    DecimalSeparator := '.';
    str := getObjectProperty('LEFT');
    {str := StringReplace(str,',','.',[rfReplaceAll]);
    str := StringReplace(str,'"','',[rfReplaceAll]);}
    str := '23.2961992136304';
    //GetLocaleFormatSettings(0,ds);
    //ds.DecimalSeparator := '.';
    Console.WriteLine(str);
    result := StrToFloat(str);
  except
    on E:Exception do begin
      Console.WriteLine(E.Message);
      raise E;
    end;
  end;
end;
kommt die fehlermeldung!!!

Ich schnall jetzt bald gar nix mehr.

Hab
  • Decimalseperator
  • StringReaplce
  • FormatSetting

aber nix klappt, das kann doch nich sein, oder???

Der String im Debugger sieht übrigens so aus:

http://spotlight-data.de/image_uploa...20.upload.jpeg

Hat noch jemand nen Tip???

Danke,
winx

Muetze1 24. Apr 2006 07:33

Re: Hilfe: Fehler beim casten ... StrToFloat(...)
 
Delphi-Quellcode:
function TObjectPropertiesHandler.getObjectLeft(): double;
var str,str2 : string;
    ds:TFormatsettings;
    i : integer;
begin
  try
    str := getObjectProperty('LEFT');
    str := StringReplace(str,',',DecimalSeparator,[rfReplaceAll]);
    str := StringReplace(str,'.',DecimalSeparator,[rfReplaceAll]);}
    //Console.WriteLine(str);
    result := StrToFloat(str);
  except
    on E:Exception do begin
      Console.WriteLine(E.Message);
      raise E;
    end;
  end;
end;
Der DecimalSeparator wird auch von anderen Funktionen wieder zurück gesetzt. Ein umsetzen des selbigen wird grundsätzlich überhaupt nicht empfohlen, daher lieber den String auf eine kompatible Form bringen - unabhängig welcher nun der aktuelle Separator ist.

/EDIT: Ups, hier gehts um .NET - sorry, alles was hier steht bezieht sich auf die VCL ohne .NET !!

winx 24. Apr 2006 07:51

Re: Hilfe: Fehler beim casten ... StrToFloat(...)
 
habs getestet :

Exception._message: String '23.2961992136304' ist kein gültiger Gleitkommawert

Irgendwas stimmt da überhapu nich :-(

mbamler 24. Apr 2006 08:05

Re: Hilfe: Fehler beim casten ... StrToFloat(...)
 
Zitat:

Zitat von winx
habs getestet :

Exception._message: String '23.2961992136304' ist kein gültiger Gleitkommawert

Irgendwas stimmt da überhapu nich :-(

var
d: double;
begin
d := StrToFloat('23,2961992136304'); //man achte auf das KOMMA
...

funktioniert einwandfrei

Gruß
Matthias

winx 24. Apr 2006 08:20

Re: Hilfe: Fehler beim casten ... StrToFloat(...)
 
vielleicht liegts auch am .Net

habs jetzt so versucht:

Delphi-Quellcode:
nfc := NumberFormatInfo.Create;
nfc.CurrencyDecimalSeparator := '.';
StringReplace(str,',',nfc.CurrencyDecimalSeparator,[rfReplaceAll]);
result := Convert.ToDouble(str,nfc);
und es klappt!!!


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