![]() |
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:
Egal was ich mache, wie ich den Decimalseperator setze, dieser Fehler kommt immer, dabei ist der Wert doch gültig...
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; Was läuft da falsch??? Danke, winx |
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 |
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)
|
Re: Hilfe: Fehler beim casten ... StrToFloat(...)
Das hat er doch versucht, afair
|
Re: Hilfe: Fehler beim casten ... StrToFloat(...)
Hi,
StrToFloat() hat eine überladene Variante, die den Parameter FormatSettings akzeptiert. Schau Dir das mal an :) mfG mirage228 |
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:
kommt die fehlermeldung!!!
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; Ich schnall jetzt bald gar nix mehr. Hab
aber nix klappt, das kann doch nich sein, oder??? Der String im Debugger sieht übrigens so aus: ![]() Hat noch jemand nen Tip??? Danke, winx |
Re: Hilfe: Fehler beim casten ... StrToFloat(...)
Delphi-Quellcode:
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.
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; /EDIT: Ups, hier gehts um .NET - sorry, alles was hier steht bezieht sich auf die VCL ohne .NET !! |
Re: Hilfe: Fehler beim casten ... StrToFloat(...)
habs getestet :
Exception._message: String '23.2961992136304' ist kein gültiger Gleitkommawert Irgendwas stimmt da überhapu nich :-( |
Re: Hilfe: Fehler beim casten ... StrToFloat(...)
Zitat:
d: double; begin d := StrToFloat('23,2961992136304'); //man achte auf das KOMMA ... funktioniert einwandfrei Gruß Matthias |
Re: Hilfe: Fehler beim casten ... StrToFloat(...)
vielleicht liegts auch am .Net
habs jetzt so versucht:
Delphi-Quellcode:
und es klappt!!!
nfc := NumberFormatInfo.Create;
nfc.CurrencyDecimalSeparator := '.'; StringReplace(str,',',nfc.CurrencyDecimalSeparator,[rfReplaceAll]); result := Convert.ToDouble(str,nfc); |
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