Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Currency String nach Gleitkomma convertieren (https://www.delphipraxis.net/143933-currency-string-nach-gleitkomma-convertieren.html)

Alfonso 26. Nov 2009 09:18


Currency String nach Gleitkomma convertieren
 
Hi,
ich habe einen String der Form "123.456,78 €". Ich möchte es in eine Gleitkommavariable konvertieren, um damit rechnen zu können.
Welche Funktion setze ich dafür ein, bzw. wie mache es es am geschicktesten?

Gruß
Alfonso

Wolfgang Mix 26. Nov 2009 09:37

Re: Currency String nach Gleitkomma convertieren
 
Wenn du dafür keine fertige Funktion findest, schreibe dir eine.
Einfach mit Delete den Punkt, das Leerzeichen und das
Eurozeichen löschen.

Gruß

Wolfgang

DeddyH 26. Nov 2009 09:43

Re: Currency String nach Gleitkomma convertieren
 
Auf einem englischen System dürfte das aber nicht reichen, dem müsste man dann mitteilen, dass das Komma der DecimalSeparator ist.

mkinzler 26. Nov 2009 10:26

Re: Currency String nach Gleitkomma convertieren
 
Man könnte es ( nach Einstellung Separator/Tausendertrenner) auch mit Val() versuchen

himitsu 26. Nov 2009 10:42

Re: Currency String nach Gleitkomma convertieren
 
Zitat:

Zitat von mkinzler
Man könnte es ( nach Einstellung Separator/Tausendertrenner) auch mit Val() versuchen

VAL beachtet dieses nicht, denn dort sind diese Werte mit dem amerikanischem "Standard" hardcodiert.

Val Str Write WriteLn nehmen immer komma='.'

ist praktisch, da man so sprachunabhängig Speichern/Laden kann :stupid:

( darum auch http://www.delphipraxis.net/internal...104276#1104276 )

Wolfgang Mix 26. Nov 2009 13:52

Re: Currency String nach Gleitkomma convertieren
 
Bei mir funktioniert folgender Ansatz, der für das Euroformat ausreicht.
Wenn nicht, dann müssen wir den Code erweitern.

Delphi-Quellcode:
function EuroStringToStr(s1:String):real;
var i:integer;
begin
  for i:=1 to length(s1) do
  begin
    if (s1[i]='.') or (s1[1]=' ') or (s1[i]='€')
    then delete (s1,i,1);
  end;
  result:=StrToFloat(s1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var s1,s2:string;
begin
  s1:=edit1.Text;
  s2:=FloatToStr(EuroStringToStr(s1));
  Edit2.Text:=s2;
end;

end.

Gruß

Wolfgang

p80286 26. Nov 2009 16:20

Re: Currency String nach Gleitkomma convertieren
 
@Wolfgang Mix
na dann hast Du aber Glück gehabt

Delphi-Quellcode:
function EuroStringToStr(s1:String):real;
var i:integer;
begin
  for i:=length(s1) downto 1 do // mit downto läßt Du verbrannte Erde HINTER Dir
  begin
    if (s1[i]='.') or (s1[1]=' ') or (s1[i]='€')
    then delete (s1,i,1);
  end;
  result:=StrToFloat(s1);
end;
und ich würde
Delphi-Quellcode:
if SL[i] not in [0..9,DecimalSeperator]......
nutzen

Gruß
K-H

himitsu 26. Nov 2009 16:33

Re: Currency String nach Gleitkomma convertieren
 
Das Problem ist ja erstmal: Ist das "123.456,78 €" immer so, oder kann es sprachabhängig auch mal "123,456.78 €" sein.

Wenn dieses sprachabhängig ist, dann
Delphi-Quellcode:
if not (SL[i] in ['0'..'9', DecimalSeperator]) then Delete(...
Ansonsten muß man es eben sprachunabhängig behandeln.

DeddyH 26. Nov 2009 16:35

Re: Currency String nach Gleitkomma convertieren
 
Zitat:

Zitat von p80286
@Wolfgang Mix
na dann hast Du aber Glück gehabt

Delphi-Quellcode:
function EuroStringToStr(s1:String):real;
var i:integer;
begin
  for i:=length(s1) downto 1 do // mit downto läßt Du verbrannte Erde HINTER Dir
  begin
    if (s1[i]='.') or (s1[1]=' ') or (s1[i]='€')
    then delete (s1,i,1);
  end;
  result:=StrToFloat(s1);
end;
und ich würde
Delphi-Quellcode:
if SL[i] not in [0..9,DecimalSeperator]......
nutzen

Gruß
K-H

Und wenn dann der Decimalseparator auf "." gestellt ist, kommt 123,45678 heraus und nicht 123456,78.

Mithrandir 26. Nov 2009 16:36

Re: Currency String nach Gleitkomma convertieren
 
Und wenn wir dann auch noch von Dollarn, und nicht von Euronen reden... :freak:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 Uhr.
Seite 1 von 2  1 2      

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