Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Показать число с разделителями тысячных знаков

Delphi , Синтаксис , Типы и Переменные

Показать число с разделителями тысячных знаков

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function AddThousandSeparator(S: string; Chr: Char): string;
 var
    I: Integer;
 begin
   Result := S;
   I := Length(S) - 2;
   while I > 1 do
    begin
     Insert(Chr, Result, I);
     I := I - 3;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   Edit1.Text := AddThousandSeparator('400500210', '''');
   // -- 400'500'210 
end;


 // Other possibility / andere Mцglichkeit: ThousandSeparator := ''''; 

 label1.Caption := FormatFloat('#,###,###.###', 23453452);

 // --> 23'453'452 

Перевод контента на русский язык:

Данное кодирование - это программный проект Delphi, который добавляет разделители тысяч к строковому вводу и отображает форматированный вывод.

Рассмотрим шаг за шагом, как работает код:

  1. Функция AddThousandSeparator принимает два параметра: S (входная строка) и Chr (символ, используемый как разделитель). Она возвращает новую строку с разделителем, вставленным на тысячной позиции.
  2. Функция initializes Result для равенства с входной строкой S.
  3. Затем функция вступает в цикл, продолжающийся до тех пор, пока I не меньше или равно 1. В каждом итерации она вставляет символ разделителя Chr в строку Result на позиции I, а затем уменьшает I на 3.
  4. Обработчик события Button1Click вызывает функцию AddThousandSeparator с входной строкой '400500210' и символом разделителя '. Это добавляет символ разделителя после каждого набора из трех цифр, что возвращает вывод '400'500'210.
  5. Функция FormatFloat используется для форматирования вещественного числа как валюты с запятыми на тысячных позициях. В этом случае она используется для форматирования целочисленного значения 23453452.

Некоторые улучшения и альтернативные решения:

  1. Вместо использования цикла для вставки символа разделителя можно использовать функцию StringReplace с регулярным выражением, чтобы заменить каждый набор из трех цифр на символ разделителя и цифры.
  2. Вы можете также использовать встроенную функцию Delphi IntToCurr, чтобы конвертировать целочисленное значение в строку валюты с тысячными позициями, например: Edit1.Text := FormatFloat('#,###', 400500210).
  3. Если вам нужно иметь больше контроля над форматированием, вы можете использовать объект FormatSettings и его свойства DecimalSeparator, ThousandSeparator и CurrencyStringFormat.

Вот пример рефакторинга кода с использованием этих предложений:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text  := FormatFloat('#,###', 400500210);
end;

// Или используя StringReplace
function AddThousandSeparator(S: string; Chr: Char): string;
var
  I: Integer;
begin
  Result  := S;
  Result  := ReplaceStr(Result, '\d{3}', Chr + '$0');
end;

Замечание: регулярное выражение \d{3} соответствует любому последовательности из трех цифр, а $0 ссылается на группу совпадения (в этом случае, на три цифры). Функция ReplaceStr заменяет каждый совпадение символом разделителя, за которым следует группа совпадения.

В статье рассматривается методика добавления разделителей тысячных знаков в числа с помощью функции Delphi AddThousandSeparator и использования FormatFloat для форматирования чисел.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Типы и Переменные ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:36:45/0.0033080577850342/0