function AddThousandSeparator(S: string; Chr: Char): string;
var
I: Integer;
begin
Result := S;
I := Length(S) - 2;
while I > 1 dobegin
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, который добавляет разделители тысяч к строковому вводу и отображает форматированный вывод.
Рассмотрим шаг за шагом, как работает код:
Функция AddThousandSeparator принимает два параметра: S (входная строка) и Chr (символ, используемый как разделитель). Она возвращает новую строку с разделителем, вставленным на тысячной позиции.
Функция initializes Result для равенства с входной строкой S.
Затем функция вступает в цикл, продолжающийся до тех пор, пока I не меньше или равно 1. В каждом итерации она вставляет символ разделителя Chr в строку Result на позиции I, а затем уменьшает I на 3.
Обработчик события Button1Click вызывает функцию AddThousandSeparator с входной строкой '400500210' и символом разделителя '. Это добавляет символ разделителя после каждого набора из трех цифр, что возвращает вывод '400'500'210.
Функция FormatFloat используется для форматирования вещественного числа как валюты с запятыми на тысячных позициях. В этом случае она используется для форматирования целочисленного значения 23453452.
Некоторые улучшения и альтернативные решения:
Вместо использования цикла для вставки символа разделителя можно использовать функцию StringReplace с регулярным выражением, чтобы заменить каждый набор из трех цифр на символ разделителя и цифры.
Вы можете также использовать встроенную функцию Delphi IntToCurr, чтобы конвертировать целочисленное значение в строку валюты с тысячными позициями, например: Edit1.Text := FormatFloat('#,###', 400500210).
Если вам нужно иметь больше контроля над форматированием, вы можете использовать объект FormatSettings и его свойства DecimalSeparator, ThousandSeparator и CurrencyStringFormat.
Вот пример рефакторинга кода с использованием этих предложений:
procedureTForm1.Button1Click(Sender:TObject);beginEdit1.Text:=FormatFloat('#,###',400500210);end;// Или используя StringReplacefunctionAddThousandSeparator(S:string;Chr:Char):string;varI:Integer;beginResult:=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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.