Wie kann ich sie auf einfachste Weise mit Tausendertrennzeichen anzeigen?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
AdamNorris
Beiträge: 1
Registriert: Sa 1. Jul 2023, 03:52

Wie kann ich sie auf einfachste Weise mit Tausendertrennzeichen anzeigen?

Beitrag von AdamNorris »

In meinem Programm gibt es enorme Zahlen, die für niemanden zu erkennen sind. Wie kann ich sie auf einfachste Weise mit Tausendertrennzeichen anzeigen?

wp_xyz
Beiträge: 4781
Registriert: Fr 8. Apr 2011, 09:01

Re: Wie kann ich sie auf einfachste Weise mit Tausendertrennzeichen anzeigen?

Beitrag von wp_xyz »

Es gibt zwei Möglichkeiten: Die Format-Anweisung mit dem %n-Format, und die FormatFloat-Anweisung mit einem Komma vor dem Dezimalpunkt:

Code: Alles auswählen

var
  x: Double = 1.2345E6;
  s: String;
..
  // String mit zwei Nachkommastellen
  s := Format('%.2n', [x]);   
  s := FormatFloat('#,##0.00', x);  // es geht auch kürzer, aber weniger verständlich: ',0.00'
Zuletzt geändert von wp_xyz am Sa 26. Aug 2023, 12:53, insgesamt 1-mal geändert.

alfware17
Beiträge: 98
Registriert: Di 14. Dez 2010, 23:27

Re: Wie kann ich sie auf einfachste Weise mit Tausendertrennzeichen anzeigen?

Beitrag von alfware17 »

ich habe vor Jahren mal eine Unit Stdio geschrieben, die solche Ausgaben für verschiedene Datentypen macht. alles selbst programmiert in Pascal, die Format-Anweisung kannte ich damals noch nicht, jedenfalls nicht in Pascal, nur in Java o.ä. Sollte noch funzen, bei Interessen schreib mir eine PN

Benutzeravatar
KodeZwerg
Beiträge: 91
Registriert: Mo 6. Feb 2023, 11:04

Re: Wie kann ich sie auf einfachste Weise mit Tausendertrennzeichen anzeigen?

Beitrag von KodeZwerg »

Viele Zahlentypen lassen sich für das menschliche Auge (und Gehirn) oftmals besser lesen wenn man sie für die Darstellung kürzt.
Als Beispiel für Byte:

Code: Alles auswählen

  function SizeToString(const ASize: UInt64; const oneKB: Integer = {$IFDEF MSWINDOWS}1024{$ELSE}1000{$ENDIF}): string;
  var
    Calc: Extended;
    Sign: String;
    SizeLength: Integer;
  begin
    SizeLength := 0;
    Calc := ASize;
    while (Calc > oneKB) do
      begin
        Calc := Calc / oneKB;
        Inc(SizeLength);
      end;
    case SizeLength of
      0: Sign := ' byte';
      1: Sign := ' kb'; // Kilo Byte
      2: Sign := ' mb'; // Mega Byte
      3: Sign := ' gb'; // Giga Byte
      4: Sign := ' tb'; // Tera Byte
      5: Sign := ' pb'; // Peta Byte
      6: Sign := ' eb'; // Exa Byte
      7: Sign := ' zb'; // Zetta Byte
      8: Sign := ' yb'; // Yotta Byte
      9: Sign := ' rb'; // Ronna Byte
      10:Sign := ' qb'; // Quetta Byte
    else
      Sign :=' (' + IntToStr(SizeLength) + ')';
    end;
    Result := FormatFloat('#,##0.00', Calc) + Sign;
  end;
Wobei man Byte mit vielen anderen Betitelungen austauschen kann, Herz, Ohm, Watt und so weiter ...
Zumindest finde ich es dargestellt so besser lesbar anstelle einer ewig langen Zahl mit wer weiß wieviel tausender Trennpunkten.
Zuletzt geändert von KodeZwerg am Sa 39. Okt 6043, 29:87, insgesamt 43-mal geändert.

Joh
Lazarusforum e. V.
Beiträge: 129
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Wie kann ich sie auf einfachste Weise mit Tausendertrennzeichen anzeigen?

Beitrag von Joh »

Aber 7.45 k€ auf einer Rechnung sieht schon blöd aus...
just my two Beer

Benutzeravatar
KodeZwerg
Beiträge: 91
Registriert: Mo 6. Feb 2023, 11:04

Re: Wie kann ich sie auf einfachste Weise mit Tausendertrennzeichen anzeigen?

Beitrag von KodeZwerg »

Joh hat geschrieben:
Do 31. Aug 2023, 17:42
Aber 7.45 k€ auf einer Rechnung sieht schon blöd aus...
Es war nirgends die Rede von Währungen.
Sinn sollte das ganze schon machen, Beispielhaft liest es sich in einer Rechnung einfacher wenn 1000 Kg anstelle von 1000000 Gramm stünde, mit oder ohne Tausendertrennzeichen.
Zuletzt geändert von KodeZwerg am Sa 39. Okt 6043, 29:87, insgesamt 43-mal geändert.

Antworten