Функции FormCalc для строк, дат и финансов
Calculate-скрипты XFA поддерживают реализованные семейства функций помимо арифметики: строковые функции, преобразование дат и финансовую библиотеку, со строковыми литералами и выражениями со смешанными типами
Строковые функции
Значения и ссылки документируют Ref, семантику копирования значений, присваивание ссылок, отсоединение null, аргументы функций, сравнения идентичности объектов и удерживаемые хендлы при перемещении повторяющихся экземпляров
Динамический Eval исполняет исходный текст через нативный компилятор и общий рантайм, включая локально объявленные переменные, функции, циклы, мутации полей, запросы локалей и записанные ответы host-транспорта
Concat, Len, Left, Right, Substr, Replace, Lower, Upper, Trim и Space работают с литералами в кавычках и ссылками на поля; числовые подвыражения автоматически конвертируются в текст
Функции дат
Нативный скалярный вычислитель конвертирует текст ISO YYYY-MM-DD через Date2Num и Num2Date; serial-дни FormCalc используют 1900-01-01 как день 1, а Date() возвращает serial сегодняшнего дня
Общее исполнение с EnableJavaScript также поддерживает картинки локалей через Date2Num(value, picture, locale), Num2Date(serial, picture, locale), DateFmt, TimeFmt, IsoTime2Num, Time2Num, Num2Time, Num2GMTime и Time
При общем исполнении опущенные картинки Num2Date теперь используют дефолтный шаблон окружающей локали; передавайте "YYYY-MM-DD" явно, чтобы сохранить прежний ISO-вывод, и используйте IsoDate2Num для строгого ISO-входа
Функции локалей и картинок FormCalc документируют параметры, унаследованный выбор локали, встроенные переопределения localeSet, числовые/текстовые картинки, единицы, кодировку и числа словами
Продвинутые picture-условия документируют научную нотацию, выраженную дробную точность, порядковые и ISO-недельные даты, варианты часов, глобальные символы и составной разбор в общих событиях, вычислениях и валидации
Финансовые функции
Финансовые функции теперь следуют семантике параметров XFA FormCalc в нативном calculate-вычислителе и компиляторе общих событий
| Функция | Параметры и результат |
|---|---|
Pmt(principal, rate, periods) | Положительный периодический платёж по кредиту; все аргументы должны быть положительными |
FV(payment, rate, periods) | Будущая стоимость равных платежей; нулевая ставка возвращает платежи, умноженные на периоды |
PV(payment, rate, periods) | Приведённая стоимость равных платежей; нулевая ставка возвращает платежи, умноженные на периоды |
Rate(future, present, periods) | Сложная ставка, необходимая, чтобы вырастить приведённую стоимость до будущей |
CTerm(rate, future, initial) | Периоды, необходимые для сложного роста начальной инвестиции |
Term(payment, rate, future) | Периоды, необходимые равным платежам, чтобы достичь будущей стоимости |
Apr(principal, monthlyPayment, periods) | Годовая процентная ставка, найденная ограниченным решателем месячной ставки |
NPV(rate, cashFlow1, ...) | Дисконтированные денежные потоки на конец периода в порядке аргументов |
IPmt и PPmt | Проценты или основная сумма для (principal, annualRate, monthlyPayment, firstMonth, months); индексы месяцев начинаются с 1, и 0 также выбирает первый месяц |
Это исправляет прежний табличный порядок аргументов и обработку знаков: перенесите Pmt(rate, periods, principal) в Pmt(principal, rate, periods) и ожидайте положительного результата; FV и PV теперь работают с периодическими платежами, а не с одной начальной или конечной суммой
Rate теперь вычисляет сложный рост; NPer(rate, payment, future) остаётся нестандартным расширением, эквивалентным Term(payment, rate, future)
Неверные финансовые домены атомарно отклоняют общие события; нативный calculate-вычислитель сообщает об упавшем выражении, а итерация расходует сконфигурированные бюджеты операций и времени
Библиотека общих событий
Компилятор общих событий FormCalc поддерживает нечувствительные к регистру встроенные имена, ведущие десятичные литералы, Null, научные тригонометрические функции, Pi, конверсию градусов/радиан, Stuff и Str; Count включает пустой текст и опускает null-значения, а агрегаты из всех-null возвращают null
Mod сохраняет знак делимого на обоих путях вычисления; Mod(-13, 3) возвращает -1
Типизация
Численные вычисления остаются в типе Double: формула, начинающаяся строковой функцией, вычисляется текстово, а финансовые результаты конвертируются обратно в числовые выражения, поэтому Round(Pmt(...), 2) работает; любое несовпадение типов по-прежнему деградирует в пустое значение
Условная логика и повторные массивы
Сравнения, And, Or, Not, булевы значения и ленивые выражения If(condition, whenTrue, whenFalse) дают ограниченный условный control flow
Sum, Avg, Min, Max и Count принимают повторные числовые селекторы вроде rows[*].amount, а их обычные формы со списком аргументов по-прежнему агрегируют скалярные выражения
Динамические запросы экземпляров
InstanceAdd(name, count) и InstanceRemove(name, index) вызывают сконфигурированный вызывающим проверяемый callback для экземпляров и возвращают итоговое их количество
Об опциональном пути через QuickJS, типизированных массивах, изоляции времени выполнения, бюджетах и телеметрии см. Ограниченные XFA FormCalc и JavaScript
Явный HTTP-транспорт
Скрипты общих событий поддерживают нечувствительные к регистру Get, Post и Put через явный host-транспорт приложения; аргументы передаются по порядку, а ответ поставляет приложение
Эти функции требуют EnableJavaScript и сконфигурированного callback HostTransport в рантайме виджетов; нативный скалярный вычислитель не выполняет сетевых запросов