AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Prism Hilfe: Fehler beim casten ... StrToFloat(...)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Offene Frage von "winx"
Ein Thema von winx · begonnen am 21. Apr 2006 · letzter Beitrag vom 24. Apr 2006
Antwort Antwort
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#1

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

  Alt 21. Apr 2006, 16:03
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
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 21. Apr 2006, 16:12
Hi,
Kommentier doch das mit dem '.'-Setzen mal aus und Ändere einfach via

->StrReplace

den '.' in ein ','

€dit: du hast den Thread 2mal erstellt
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 21. Apr 2006, 16:14
Oder versuchs durch Verändern der Konstante DecimalSeparator ( weiß nicht ob das in Delphi.Net vorhanen ist, sollte aber)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#4

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

  Alt 21. Apr 2006, 16:17
Das hat er doch versucht, afair
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

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

  Alt 21. Apr 2006, 16:27
Hi,

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

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#6

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

  Alt 24. Apr 2006, 08:27
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

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

  Alt 24. Apr 2006, 08:33
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 !!
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#8

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

  Alt 24. Apr 2006, 08:51
habs getestet :

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

Irgendwas stimmt da überhapu nich
  Mit Zitat antworten Zitat
mbamler

Registriert seit: 19. Mai 2005
Ort: Hamburg
118 Beiträge
 
Delphi 7 Architect
 
#9

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

  Alt 24. Apr 2006, 09:05
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
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#10

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

  Alt 24. Apr 2006, 09:20
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!!!
  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 23:42 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