Использование формата в LiveBindings CustomFormat

Я пытаюсь использовать LiveBindings для форматирования числа для отображения в TEdit в форме FireMonkey.

Я пытаюсь использовать метод Format в CustomFormat привязки для форматирования числа с двумя десятичными знаками.

Я могу "жестко кодировать" вывод:

Format("Hello", %s)

который работает, но я не могу понять, какую строку форматирования использовать. Если я попробую стандартную строку форматирования, такую ​​как,

Format("%.2f", %s)

Я получаю ошибку во время выполнения "Формат недействителен или несовместим с аргументом".

Действительно, я получаю сообщение об ошибке всякий раз, когда я включаю символ% в строку формата, поэтому я предполагаю, что Формат принимает другой тип аргумента, но я не могу найти никакой документации, чтобы сказать, что такое правильная строка формата.

3 ответа

Решение

Параметр передается в CustomFormat как% s. Система привязок подготавливает этот параметр перед передачей данных в оценщик. Таким образом, любые другие символы% в строке CustomFormat приведут к ошибке.

Как и в обычной строке формата, вы можете включить буквальный знак%, поставив двойной% (т. Е. %%).

Таким образом, любые% s в строке формата необходимо преобразовать в %%, например

Format('%%.2f', %s)

который разбирается на

Format('%.2f', 67.66666)

а затем проанализировали до

67.67

для отображения.

Если вы хотите включить буквальный% в окончательный результат, вам нужно поставить четверной%, например

Format('%%.2f%%%%', %s)

становится

Format('%.2f%%', 67.6666)

и отображается как

67.67%

Примечание. Функция обычного формата принимает последний параметр, который представляет собой массив значений. Метод Format в системе привязок принимает список параметров переменной длины.

Кроме того, имена методов чувствительны к регистру. "Формат" правильный, "формат" не удастся.

Вы не можете использовать Format('%.2f',[%s]) в LiveBindings -> CustomFormat

% S зарезервирован для данных и для TEdit, это строка

d : double;
s : string;
...
d := 1234.5678;
s:=Format('%.2f',[d]);

Формат () предназначен для преобразования [int, decimal, double, float] в строку.
все остальные выдают ошибку invalid argument
действительным является, например,

TLinkControlToField1 -> CustomFormat : "Double : "+UpperCase(%s)

даст вам в Edit1.text

Double : 1234.5678

Хорошо, мы знаем, что Uppercase() для '1234.5678' не имеет эффектов.
Только чтобы показать (%s) является строкой

Решения:


вмененная 67,6666

ПОЛЬЗОВАТЕЛЬСКИЙ ФОРМАТ: ToStr(Format('%%.2f', Value)) + '%%'

выход 67.00%

Другие вопросы по тегам