{$mode objfpc}{$H+} uses SysUtils; var err : boolean; procedure p; var AStr,AText: string; AValue: int64; begin //This goes wrong, notice the AStr input and output AValue:=1234567890; AStr := Format('%0.n',[double(1.0)*AValue]); //1.234.567.890 AStr := Format('%s',[AStr]); Writeln('Wrong:' +AStr); //Wrong: ???? if AStr<>'1,234,567,890' then err:=true; //This is Ok, notice the changed output AText AValue:=2134567890; AStr := Format('%0.n',[double(1.0)*AValue]); //2.134.567.890 AText := Format('%s',[AStr]); Writeln('Ok:' +AText); //Ok 2.134.567.890 if Atext<>'2,134,567,890' then err:=true; end; begin ThousandSeparator:=','; p; if err then halt(1); end.