Использование формата в 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) является строкой
Решения:
- Установите в TFloatField -> DisplayFormat
#00000.00
раунды и дисплей01234.57
- проверить TFloatField -> валюта
раунды и дисплей1234.57
- используйте компонент смотрите здесь
LiveBindings в XE3: форматирование ваших полей
вмененная 67,6666
ПОЛЬЗОВАТЕЛЬСКИЙ ФОРМАТ: ToStr(Format('%%.2f', Value)) + '%%'
выход 67.00%