Функции 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 в рантайме виджетов; нативный скалярный вычислитель не выполняет сетевых запросов