Hallo zusammen,
gerne möchte ich lange Integerwerte mit Tausender Punkte (.) aufbereiten.
Also wie im Betreff angegeben.
Datt funzt aber nicht. Was mache ich falsch?
Oder ist die einzige Möglichkeit etwas eigenes zu stricken?
Viele Grüße
Lorca
procedure XXX;
VAR lv_s : String; ls_fmt : TFormatSettings; lv_Value : LongInt;
BEGIN
lv_Value := 24578912;
ls_fmt.ThousandSeparator := '.';
lv_s := Format( '%8d', [ lv_Value ], ls_fmt );
END;
Integer Aufbereitung 24578912 -> 24.578.912
Re: Integer Aufbereitung 24578912 -> 24.578.912
Tausender-Trenner kommen nur mit Format-Maske %n, und - das mache ich immer falsch - die zugehörige Zahl muss ein Float sein, kein Integer. Also: so sollte es funktionieren:
Code: Alles auswählen
procedure XXX;
var
lv_s : String;
ls_fmt : TFormatSettings;
lv_Value : LongInt;
begin
lv_Value := 24578912;
ls_fmt := FormatSettings;
ls_fmt.ThousandSeparator := '.';
lv_s := Format( '%8.0n', [ 1.0*lv_Value ], ls_fmt ); // ich würde noch die 8 weglassen: %.0n
end;
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Integer Aufbereitung 24578912 -> 24.578.912
Dies Zahl mit den 1000er Trennern kann aufgrund der Kompatibilität mit Delphi nicht mehr zurück gewandelt werden. Das ist kein Bug in fpc/Lazarus sondern per Design (Ich glaube mich daran zu Erinnern das das ein Bug in Delphi war). Nur so als Anmerkung.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Integer Aufbereitung 24578912 -> 24.578.912
Hi zusammen
,
ganz herzlichen Dank
Gruß
Lorca

ganz herzlichen Dank

Gruß
Lorca
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 359
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Integer Aufbereitung 24578912 -> 24.578.912
Hi!
Wieso gibt es für Integer eigentlich keine Standardfunktion für Tausenderpunkte? Den Umweg über Fließkomma finde ich suboptimal.
Folgender Code ist nicht umständlicher und schneller ...
Wieso gibt es für Integer eigentlich keine Standardfunktion für Tausenderpunkte? Den Umweg über Fließkomma finde ich suboptimal.
Folgender Code ist nicht umständlicher und schneller ...
Code: Alles auswählen
var x, i: Integer;
s: String;
x:=24578912;
s:=IntToStr(x);
i:=Length(s)-2;
While i>1 do begin Insert('.',s,i); dec(i,3); end;
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 359
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Integer Aufbereitung 24578912 -> 24.578.912
Ach Mensch, ich hatte negative Zahlen nicht berücksichtigt.
Code: Alles auswählen
procedure insertThousandsSeparators(var s: String; aSeparator: Char); // nicht für Strings mit Nachkommastellen
var i, minI: SizeInt;
begin
i:=Length(s);
if i<4 then Exit;
minI:=1;
if s[1]='-' then minI:=2;
dec(i,2);
while i>minI do begin Insert(aSeparator,s,i); dec(i,3); end;
end;