Delphi-PRAXiS

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:

Wolfgang Mix 26. Nov 2009 16:47

Re: Currency String nach Gleitkomma convertieren
 
Ich denke, das müsste dem TE jetzt weiterhelfen :)

Gruß

Wolfgang

DeddyH 26. Nov 2009 17:09

Re: Currency String nach Gleitkomma convertieren
 
Naja, einen Vorschlag hätte ich noch:
Delphi-Quellcode:
function EuroStringToStr(s1: String; DecSep: char = ','): double;
var i: integer;
begin
  for i:= length(s1) downto 1 do
    if not (s1[i] in ['0'..'9',DecSep]) then
      Delete(s1,i,1);
  Result := StrToFloat(s1);
end;
Damit kann man sich dann aussuchen, ob fix das Komma oder doch lieber der Dezimalseparator genommen werden soll.

Wolfgang Mix 26. Nov 2009 18:52

Re: Currency String nach Gleitkomma convertieren
 
Gefällt mir jetzt so sehr gut. Wollte nur den Anstoss geben :)

Namenloser 26. Nov 2009 19:00

Re: Currency String nach Gleitkomma convertieren
 
Ich frage mich allerdings, ob es wirklich sinnvoll ist, alles außer den erlaubten Zeichen einfach zu löschen. Stellt euch vor, einer ruft sowas auf:
Delphi-Quellcode:
EuroStringToStr('1ABC23,5   67.89 € wuppdi')
In dem Falle wäre es schon sinnvoll, eine Fehlermeldung zu erhalten...

Wolfgang Mix 26. Nov 2009 19:06

Re: Currency String nach Gleitkomma convertieren
 
Hast recht, ausserdem sollten wir jetzt noch den Funktionsnamen von EuroStringToStr
auf EuroStringToFloat ändern

Alfonso 26. Nov 2009 20:40

Re: Currency String nach Gleitkomma convertieren
 
Eine wichtige Sache habt Ihr noch vergessen: Das Minuszeichen! Es gibt auch Leute die Schulden machen :wink:
Delphi-Quellcode:
function EuroStringToFloat(s1: String; DecSep: char = ','): double;
var i: integer;
begin
  for i:= length(s1) downto 1 do
    if not (s1[i] in ['0'..'9','-',DecSep]) then
      Delete(s1,i,1);
  Result := StrToFloat(s1);
end;

Alfonso 26. Nov 2009 20:42

Re: Currency String nach Gleitkomma convertieren
 
Zitat:

Zitat von NamenLozer
Stellt euch vor, einer ruft sowas auf:
Delphi-Quellcode:
EuroStringToStr('1ABC23,5   67.89 € wuppdi')
In dem Falle wäre es schon sinnvoll, eine Fehlermeldung zu erhalten...

Tja, wie stellt man jetzt fest, ob der eingegebene String eine gültige Zahl enthält ... ? :gruebel:

Wolfgang Mix 26. Nov 2009 21:21

Re: Currency String nach Gleitkomma convertieren
 
@Alfonso:
Zitat:

Eine wichtige Sache habt Ihr noch vergessen: Das Minuszeichen! Es gibt auch Leute die Schulden machen
Haben wir nicht :)
Die Funkton klappt auch mit '-' als 1.Zeichen :mrgreen:

Grüß

Wolfgang

Alfonso 27. Nov 2009 20:00

Re: Currency String nach Gleitkomma convertieren
 
Zitat:

Zitat von Wolfgang Mix
@Alfonso:
Zitat:

Eine wichtige Sache habt Ihr noch vergessen: Das Minuszeichen! Es gibt auch Leute die Schulden machen
Haben wir nicht :)
Die Funkton klappt auch mit '-' als 1.Zeichen :mrgreen:

Das verstehe ich aber nicht. Die Schleife geht runter bis zum 1.ten Zeichen, und da das '-' nicht im Set ['0'..'9',DecSep] war, wurde es doch gelöscht, oder bin ich blind. 8-)

Gruß
Alfonso

Wolfgang Mix 27. Nov 2009 20:21

Re: Currency String nach Gleitkomma convertieren
 
Sorry, hast natürlich recht, hatte ich nicht getestet, nur mit der 1. Version.

Gruß

Wolfgang


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