Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tausender-Trennzeichen in einem Zahlenstring einfügen (https://www.delphipraxis.net/34055-tausender-trennzeichen-einem-zahlenstring-einfuegen.html)

TypusMensch 16. Nov 2004 19:02


Tausender-Trennzeichen in einem Zahlenstring einfügen
 
Erweiterte Funktion von Daniel B
siehe Beitrag

Erweitert wurde, dass sowohl Kommazahlenstrings, als auch einfache Zahlenstrings unterschieden werden und daraufhin die Trennzeichen gesetzt werden.

ThX an Daniel für die Vorlage...

Delphi-Quellcode:
function ThouSep2(sTemp: String; cTemp: Char): String;
var
  iTemp: Integer;
  i : Integer;
  komma:boolean;

begin

komma := False;
for i := 1 to Length(sTemp) do
  begin
  if sTemp[i] = ',' then komma := true;
  end;

if komma = True then
  begin
  Result := sTemp;
  iTemp := Length(sTemp) -5;
  while iTemp > 1 do
    begin
    Insert(cTemp, Result, iTemp);
    iTemp := iTemp -3;
    end;
  end;

if komma = False then
  begin
  Result := sTemp;
  iTemp := Length(sTemp) -2;
  while iTemp > 1 do
    begin
    Insert(cTemp, Result, iTemp);
    iTemp := iTemp -3;
    end;
  Result := Result + ',00';
  end;
end;

Mystic 16. Nov 2004 19:08

Re: Tausender-Trennzeichen in einem Zahlenstring einfügen
 
geht das nicht auch so?

Delphi-Quellcode:
s := FormatFloat(',0.00',StrToFloat(s));
das passt sich sogar an die windows-einstellungen an.

__________________________________________________ ____________

aber zumindest das:

Delphi-Quellcode:
komma := False;
for i := 1 to Length(sTemp) do
  begin
  if sTemp[i] = ',' then komma := true;
  end;
geht auch so:

Delphi-Quellcode:
komma := Pos(',',stemp) > 0;

TypusMensch 16. Nov 2004 19:19

Re: Tausender-Trennzeichen in einem Zahlenstring einfügen
 
Delphi-Quellcode:
function ThouSep2(sTemp: String; cTemp: Char): String;
var
  iTemp: Integer;
begin
sTemp := FormatFloat(',0.00',StrToFloat(sTemp)); //die einzige einzufügende Zeile - LOOOOL
Result := sTemp;
iTemp := Length(sTemp) -5;
while iTemp > 1 do
  begin
  Insert(cTemp, Result, iTemp);
  iTemp := iTemp -3;
  end;
end;
Edit:
---> Funktioniert nicht...

Delphi-Quellcode:
function ThouSep2(sTemp: String; cTemp: Char): String;
var
  iTemp: Integer;
  komma:boolean;

begin
komma := Pos(',',stemp) > 0;

if komma = True then
  begin
  Result := sTemp;
  iTemp := Length(sTemp) -5;
  while iTemp > 1 do
    begin
    Insert(cTemp, Result, iTemp);
    iTemp := iTemp -3;
    end;
  end;

if komma = False then
  begin
  Result := sTemp;
  iTemp := Length(sTemp) -2;
  while iTemp > 1 do
    begin
    Insert(cTemp, Result, iTemp);
    iTemp := iTemp -3;
    end;
  Result := Result + ',00';
  end;
end;
---> Funktioniert einwandfrei...!

ThX

Mystic 16. Nov 2004 19:21

Re: Tausender-Trennzeichen in einem Zahlenstring einfügen
 
Funktioniert nicht?

PS: Noch eine Optimierung...

Delphi-Quellcode:
if komma then begin
  .
  .
  .
end else begin
  .
  .
  .
end;

TypusMensch 16. Nov 2004 19:30

Re: Tausender-Trennzeichen in einem Zahlenstring einfügen
 
Wie bereits oben editiert, klappt das nicht so ganz. Außerdem ging es mir vorwiegend um die Trennzeichen (Trausender-Punkt).

Wenn man aber selbst vorher nicht weiß, was der User angibt (Zahl mit oder ohne Komma)??? :wink:

Nein... bei der ersten Variante macht er teilweise Punkte zuviel... :?

[delphi]

Mystic 16. Nov 2004 19:36

Re: Tausender-Trennzeichen in einem Zahlenstring einfügen
 
Zitat:

Zitat von TypusMensch
Nein... bei der ersten Variante macht er teilweise Punkte zuviel... :?

Liegt daran dass das FormatFloat bereits das fertige Ergebnis mit Punkten liefert.

Funktioniert DOCH:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  s1,s2,s3: string;
  r1: extended;

function ThouSep2(s: String): String; overload;
begin
  Result := FormatFloat(',0.00',StrToFloat(s)); //die einzige einzufügende Zeile - LOOOOL
end;

function ThouSep2(r: extended): String; overload;
begin
  Result := FormatFloat(',0.00',r); //die einzige einzufügende Zeile - LOOOOL
end;

begin
  s1 := '103493913495,46';
  r1 := 138420083240.13;
  s2 := ThouSep2(s1);
  s3 := ThouSep2(r1);
  writeln(s2);
  writeln(s3);
  readln;
end.
Ausgabe:
103.493.913.495,46
138.420.083.240,13

DP-Maintenance 21. Nov 2004 12:07

DP-Maintenance
 
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Zurück in die öffentl. DP. Source ist hier in der Code-Library zu finden.


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