Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   StrToFloat - mit 1000er Trennzeichen (https://www.delphipraxis.net/153137-strtofloat-mit-1000er-trennzeichen.html)

FrankTorsten 22. Jul 2010 12:54

Delphi-Version: 2005

StrToFloat - mit 1000er Trennzeichen
 
Hallo :-D

Ich habe in einem Stringgrid eine berechnete Spalte.

Jetzt wollte ich die einzelnen Werte dieser Spalte auslesen - bissel damit was rechnen, und dann den berechneten Wert in einer anderen Spalte eintragen. Probleme gehen dann allerdings schon beim auslesen der Zellwerte los ... :wink:

Delphi-Quellcode:
For i:= 1 to 38 do
 Begin
 Lagerhausbedarf1:= StrtoFloat (AdvSpreadGrid1.Cells[4, i]);
 Lagerhausbedarf2:= StrtoFloat (AdvSpreadGrid1.Cells[5, i]);
 end;
Die Ursprungswerte sind jetzt allerdings (und daran liegt es wohl) mit einem 1000er Trennzeichen im Stringgrid drin.

Und genau an der Stelle, wenn die oben angegebene Schleife die erste Zahl in die Finger bekommt, die über 1000 liegt, kommt dann die Fehlermeldung: '1.390' ist not a valid floating point value

Gibt es für dieses *Problemchen* eine relativ unkomplizierte Lösung??

mkinzler 22. Jul 2010 13:01

AW: StrToFloat - mit 1000er Trennzeichen
 
Ja das setzen der Konstanten DecimalSeparator/ThousandSeparator oder die Verwendung der überladenen Konvertierungsfunktionen mit entsprechenden Formaten

FrankTorsten 22. Jul 2010 13:57

AW: StrToFloat - mit 1000er Trennzeichen
 
In die Themen hätte ich mich jetzt erst einlesen müssen, nachdem ich das durch Google mal habe suchen lassen - trotzdem danke für den Hinweis. Da weiß ich dann doch wenigstens schon Bescheid, wie man es bei komplizierteren Sachen machen müsste.

In meinem wohl relativ unkomplizierten Fall (ging generell NUR um den 1000er-Punkt) hat dann zum Glück auch ein *ersetzen* gereicht - na Gott sei Dank :-D

Delphi-Quellcode:
For i:= 1 to 38 do
 Begin
 Lagerhausbedarf1:= StrtoFloat (StringReplace(AdvSpreadGrid1.Cells[4, i], '.', '', [rfReplaceAll]));
 Lagerhausbedarf2:= StrtoFloat (StringReplace(AdvSpreadGrid1.Cells[5, i], '.', '', [rfReplaceAll]));
 
 //Und der Rest hat dann erfreulicherweise sogar funktioniert :)
 If Lagerhausbedarf1 > Lagerhausbedarf2
 then AdvSpreadGrid1.Cells[10, i]:= FloatToStrF ((Lagerhausbedarf1 -1500)/8000,ffNumber,10,2)
 else AdvSpreadGrid1.Cells[10, i]:= FloatToStrF ((Lagerhausbedarf2 -1500)/8000,ffNumber,10,2);
 AdvSpreadGrid1.Alignments[10, i] := taRightJustify;
 end;

mkinzler 22. Jul 2010 14:42

AW: StrToFloat - mit 1000er Trennzeichen
 
Einfacher wäre aber das setzen der erwähnten Konstante gewesen:

Delphi-Quellcode:
ThousandSeparator = '.';

Hawkeye219 22. Jul 2010 17:45

AW: StrToFloat - mit 1000er Trennzeichen
 
Hallo,
Zitat:

Zitat von mkinzler (Beitrag 1036860)
Einfacher wäre aber das setzen der erwähnten Konstante gewesen:

Delphi-Quellcode:
ThousandSeparator = '.';

Die Funktion StrToFloat lässt sich davon leider nicht beeindrucken...

Gruß Hawkeye

Mschmidt 22. Jul 2010 18:09

AW: StrToFloat - mit 1000er Trennzeichen
 
ich gebe zu bedenken, dass solche Konstrukte sehr fehleranfällig und nicht für den internationalen Markt geeignet sind.
Was passiert, wenn ich das System auf 2057(englisch UK) umstelle? Komma=punkt, Punkt=Komma.
Ich würde nicht den Wert an sich ändern, sondern nur dessen Darstellung.
:-mschmidt

DeddyH 22. Jul 2010 18:52

AW: StrToFloat - mit 1000er Trennzeichen
 
Mit
Delphi-Quellcode:
Lagerhausbedarf1:= StrtoFloat (StringReplace(AdvSpreadGrid1.Cells[4, i], ThousandSeparator, '', [rfReplaceAll]));
müsste dieses Problem aber wieder zu umschiffen sein, oder meintest Du etwas anderes?


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