Как отформатировать целое число, используя текущую локаль в Delphi

var i : integer;

i := 1234567;

Учитывая вышеизложенное, я хочу, чтобы в качестве вывода была строка «1 234 567» (при условии, что локаль Великобритании). IntToStr просто дает мне «1234567». Я уверен, что для этого есть один лайнер, но я не могу его найти...


person Roddy    schedule 17.11.2008    source источник


Ответы (5)


Попробуйте функцию форматирования.

Label1.Caption := Format('%.0n', [i + 0.0]);
person Bruce McGee    schedule 17.11.2008

Или, если вам нужно быть потокобезопасным или вы хотите убедиться, что вы используете языковой стандарт системы по умолчанию, или хотите указать его:

function FormatIntFromLCID(const AValue: Integer; const LCID: Integer = LOCALE_SYSTEM_DEFAULT): string;
var
  AFormatSettings: TFormatSettings;
begin
  GetLocaleFormatSettings(LCID, AFormatSettings);
  Result := FormatFloat('#,##0',AValue, AFormatSettings);
end;

см. этот сообщение для более полного обсуждения форматирования/локалей

person Francesca    schedule 17.11.2008

s := FormatFloat('#,##0', i);

person Uwe Raabe    schedule 17.11.2008

У меня есть эта функция для этого, где d означает, возможно, десятичное число:

function dn(i: integer): string; 
begin 
  result := format('%.0n', [i.ToDouble]) 
end;
person Mark Patterson    schedule 14.05.2020

Формат('%n', [12345.678]);

person Osama Al-Maadeed    schedule 17.11.2008