Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Integer mit tausender trennzeichen ausgeben (https://www.delphipraxis.net/150464-integer-mit-tausender-trennzeichen-ausgeben.html)

BBoy 17. Apr 2010 18:31


Integer mit tausender trennzeichen ausgeben
 
Hallo,
ich möchte eine integer auf einem label ausgeben aber mit tausender trennzeichen. Also so: 4.356.567
Das soll wohl mit Format gehen, aber ich bekomme das einfach nicht hin, wäre nett wenn jemand helfen könnte :)

himitsu 17. Apr 2010 18:38

Re: Integer mit tausender trennzeichen ausgeben
 
Hier im Forum suchenInteger Tausendertrennzeichen

OK, das "Tausendertrennzeichen" ist ein zu langes Wort, für die DP-Suche,
aber Delphi-Referenz durchsuchenInteger Tausendertrennzeichen (rechts oben auf "DelphiPRAXiS" umschalten)


Sowas nutze ich seit vielen Jahren:
Delphi-Quellcode:
S := Format('%.0n', [MyInteger / 1]);

BBoy 17. Apr 2010 19:06

Re: Integer mit tausender trennzeichen ausgeben
 
vielen dank! Funktioniert prima :)

Wolfgang Mix 17. Apr 2010 19:09

Re: Integer mit tausender trennzeichen ausgeben
 
@himitsu:
Deine Suchwortkombination bringt aber auch nix :(

lbccaleb 17. Apr 2010 20:23

Re: Integer mit tausender trennzeichen ausgeben
 
Hab auch noch was etwas komplizierteres, aber funzt :)


Delphi-Quellcode:
function PointDelimiter(Argument: string; TrennChar: char): string;
var n,i: integer;
begin
  Result := Argument;
  n := Length(Result);
  if n > 3 then begin
    i := 0;
    While n > 0 do begin
      inc(i);
      if (i >= 3) and (n > 1) then begin
        Insert(TrennChar,Result,n);
        i := 0;
      end;
      dec(n);
    end;
  end;
end;

function IntToStrWithDots(Int: Int64): string;
  begin
    Str(Int, Result);
    Result := PointDelimiter(Result, '.');
  end;

//Anwendung:
IntToStrWithDots(1000000000) //gibt '1.000.000.000' aus

mkinzler 17. Apr 2010 20:28

Re: Integer mit tausender trennzeichen ausgeben
 
Wenn die entsprechende Konstante gesetzt ist ( thousandseparator), sollte es auch mit einem simplen
IntToStr() gehen

himitsu 17. Apr 2010 20:41

Re: Integer mit tausender trennzeichen ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
IntToStr aka CvtInt gibt niemals Tausendertrennzeichen zurück, da dieses in der Funktion nicht eingebaut ist.

Zitat:

Zitat von Wolfgang Mix
@himitsu:
Deine Suchwortkombination bringt aber auch nix :(


alzaimar 18. Apr 2010 08:51

Re: Integer mit tausender trennzeichen ausgeben
 
FormatFloat wäre auch noch ein Kandidat. Der Formatierungsstring entsprich dem, der bei Tabellenfeldern verwendet wird. Hier wäre das

Delphi-Quellcode:
GanzZahlMitTausenderTrennzeichen := FormatFloat('0,', GanzZahl);

derMischka 26. Mai 2015 12:53

AW: Integer mit tausender trennzeichen ausgeben
 
Delphi-Quellcode:
function NewIntToStr(aValue: int64; Dots: Char=#0): String;
var ii : integer;
begin
  Result := IntToStr(aValue);
  if Dots < ' ' then exit;
  ii := length(Result) - 2;
  while ii > 1 do
  begin
    Insert(Dots,Result,ii);
    dec(ii,3);
  end;
end;

himitsu 26. Mai 2015 13:01

AW: Integer mit tausender trennzeichen ausgeben
 
Da NewIntToStr doch vorallem für die Tausenderpunkte da ist, sollte dann Dots nicht besser standardmäßig mit ThousandSeparator vorbelegt sein?
Und warum "New"? Die Funktion ist doch nicht "neu", sondern "anders" ... halt mit "punkten".

PS:
Delphi-Quellcode:
NewIntToStr(-123456798, '.')
:stupid:

Amateurprofi 26. Mai 2015 16:38

AW: Integer mit tausender trennzeichen ausgeben
 
Zitat:

Zitat von derMischka (Beitrag 1303077)
Delphi-Quellcode:
function NewIntToStr(aValue: int64; Dots: Char=#0): String;
var ii : integer;
begin
  Result := IntToStr(aValue);
  if Dots < ' ' then exit;
  ii := length(Result) - 2;
  while ii > 1 do
  begin
    Insert(Dots,Result,ii);
    dec(ii,3);
  end;
end;

Versuch das mal mit NewIntToStr(-100,'.');
Ergebnis ist "-.100"

Besser so:

Delphi-Quellcode:
function NewIntToStr(aValue: int64; Dots: Char=#0): String;
var ii : integer;
begin
   Result := IntToStr(Abs(aValue));
   if Dots < ' ' then exit;
   ii := length(Result) - 2;
   while ii > 1 do
   begin
     Insert(Dots,Result,ii);
     dec(ii,3);
   end;
   if aValue<0 then Result:='-'+Result;
end;

himitsu 26. Mai 2015 17:02

AW: Integer mit tausender trennzeichen ausgeben
 
Oder eine der "fertigen" Lösungen. :angke2:

Schwedenbitter 28. Sep 2015 14:06

AW: Re: Integer mit tausender trennzeichen ausgeben
 
Zitat:

Zitat von himitsu (Beitrag 1015372)
...
Sowas nutze ich seit vielen Jahren:
Delphi-Quellcode:
S := Format('%.0n', [MyInteger / 1]);

@himitsu
Dieser Code ist sehr schön, kurz und präzise. Ich persönlich ziehe (neuerdings) auch Format dem FormatFloat vor, weil man die Ausgaben vollständig formulieren kann und sich damit Ketten wie
Delphi-Quellcode:
Begin
   Msg:= FormatFloat('0,', Pos) + ' von ' + FormatFloat('0,' fCount) + ' Dateien wurden fertiggestellt. [' + IntToStr(fRemain) + ' Sek. verbleibend]';
   Msg:= Format('%.0n von %.0n Dateien wurden fertiggestellt. [%.0n Sek. verbleibend]', [Pos / 1, fCount / 1, fRemain / 1]);
End;
ersparen kann und man gerade bei den Leerzeichen Fehler vermeidet. Zudem macht es das externe Ablegen/Erweitern mit anderen Sprachen einfacher.

Deinen Code findet man gleich als erstes auch über google. Deshalb hätte ich noch eine klitzekleine Bitte/Verbesserungsvorschlag:
Da ich nicht aufmerksam las und
Delphi-Quellcode:
Format();
- jedenfalls bei mir - keinerlei Fehler anzeigt, habe ich die Integer-Werte übergeben und mich fast 2h gewundert, dass nichts klappt. Und das genau so lange, bis mir auffiel, dass aus einem Integer- ein Gleitzahl-Wert durch
Delphi-Quellcode:
/1
gemacht werden muss. Ich denke, es würde zukünftigen Suchern/Lesern erheblich vereinfachen, wenn Du das nochmal dort auffällig(er) anmerken könntest!
:dp:

Ich habe in der Hilfe nichts zur Zeit gefunden. Kann man mit
Delphi-Quellcode:
Format();
auch gleich Ausgaben wie
Delphi-Quellcode:
[00:25]
erzeugen.

PeterPanino 6. Sep 2020 18:10

AW: Re: Integer mit tausender trennzeichen ausgeben
 
Zitat:

Zitat von himitsu (Beitrag 1015372)

Sowas nutze ich seit vielen Jahren:
Delphi-Quellcode:
S := Format('%.0n', [MyInteger / 1]);

Ich nehme an, im Englischen wird statt des Punktes ein Komma ausgegeben? (Bei regionalen Default-Einstellungen)

himitsu 6. Sep 2020 20:07

AW: Re: Integer mit tausender trennzeichen ausgeben
 
Nein.

Der FormatString hat nichts mit Sprachen zu tun.
Der ist immer quasi englisch, aber beim Result sieht es anders aus.


Zitat:

Zitat von Schwedenbitter (Beitrag 1317119)
Ich habe in der Hilfe nichts zur Zeit gefunden. Kann man mit
Delphi-Quellcode:
Format();
auch gleich Ausgaben wie
Delphi-Quellcode:
[00:25]
erzeugen.

SysUtils.Format und string.Format bieten leider keine Formatierungen für Zeitangaben ... auschließlich nummerische Formatierungen.

Bleibt also nur Mathematik
Delphi-Quellcode:
Format('%2.d:%2.d', [d * 24, (d * 24 * 60) mod 60]) // TTime, bzw. Trunc oder TimeOf für TDateTime
Format('%2.d:%2.d', [HourOf(d), MinuteOf(d)])

TigerLilly 8. Sep 2020 06:26

AW: Re: Integer mit tausender trennzeichen ausgeben
 
Zitat:

Zitat von PeterPanino (Beitrag 1473097)
Zitat:

Zitat von himitsu (Beitrag 1015372)

Sowas nutze ich seit vielen Jahren:
Delphi-Quellcode:
S := Format('%.0n', [MyInteger / 1]);

Ich nehme an, im Englischen wird statt des Punktes ein Komma ausgegeben? (Bei regionalen Default-Einstellungen)

Ja, richtig. Format('%.0n' formatiert mit 1000er Trennzeichen. Danke an DaddyH für den Hinweis.

DeddyH 8. Sep 2020 07:01

AW: Integer mit tausender trennzeichen ausgeben
 
Als Tausendertrenner? Sicher?

himitsu 8. Sep 2020 08:59

AW: Integer mit tausender trennzeichen ausgeben
 
Ach Mist, falschrum verstanden.
Dort wird das Tausenderkomma verwendet, aber das hat nicht "direkt" mit diesem
Delphi-Quellcode:
.
hier zu tun,
aber ja, ausgegeben wird jeweils das Dezimaltrennzeichen im globalen oder übergebenen FormatSettings.

Beim FormatString im FloatFormat und Dergleichen ist das "eindeutiger" und hängt unmittelbar zusammen.
Format/Dezimal-"Punkt"
Delphi-Quellcode:
'###.###'
= verwende das Char aus FormatSettings.DecimalSeparator als Dezimaltrennzeichen
und das Format-"Komma"
Delphi-Quellcode:
'###,###'
= verwende das Char aus FormatSettings.ThousandSeparator als Tausendertrennzeichen
und das Zeichen
Delphi-Quellcode:
'###"."###'
= verwende immer den String/Zeichen

Amateurprofi 3. Nov 2023 07:34

AW: Re: Integer mit tausender trennzeichen ausgeben
 
Zitat:

Zitat von himitsu (Beitrag 1015372)
Hier im Forum suchenInteger Tausendertrennzeichen

OK, das "Tausendertrennzeichen" ist ein zu langes Wort, für die DP-Suche,
aber Delphi-Referenz durchsuchenInteger Tausendertrennzeichen (rechts oben auf "DelphiPRAXiS" umschalten)


Sowas nutze ich seit vielen Jahren:
Delphi-Quellcode:
S := Format('%.0n', [MyInteger / 1]);

So einfach, aber muss man erstmal drauf kommen.
Hab ich per Zufall gefunden, und die Lösung gekriegt, für ein Problem, das ich hatte.
Danke dafür.

Delphi.Narium 3. Nov 2023 11:11

AW: Integer mit tausender trennzeichen ausgeben
 
Meine Lösung dafür ist immer
Delphi-Quellcode:
S := Format('%.0n', [MyInteger + 0.0]);

Uwe Raabe 3. Nov 2023 11:19

AW: Integer mit tausender trennzeichen ausgeben
 
Wer sich an neumodischen Kram traut kann es auch so schreiben:
Delphi-Quellcode:
S := Format('%.0n', [MyInteger.ToDouble]);

Amateurprofi 3. Nov 2023 22:45

AW: Integer mit tausender trennzeichen ausgeben
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1528957)
Meine Lösung dafür ist immer
Delphi-Quellcode:
S := Format('%.0n', [MyInteger + 0.0]);

Auch schön.

Amateurprofi 3. Nov 2023 22:51

AW: Integer mit tausender trennzeichen ausgeben
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1528959)
Wer sich an neumodischen Kram traut kann es auch so schreiben:
Delphi-Quellcode:
S := Format('%.0n', [MyInteger.ToDouble]);

Wer sich an neumodischen Kram traut, und bei dem dieser neumodische Kram verfügbar ist, ...
Trotzdem Danke!


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