FormCalc 字符串、日期和财务函数

XFA 计算脚本支持算术之外的已实现函数族:字符串函数、日期转换和财务库,带字符串字面量与混合类型表达式

字符串函数

Values and References 记录 Ref、值拷贝语义、引用赋值、null 脱离、函数参数、对象身份比较,以及重复实例移动中留存的句柄

Dynamic Eval 经原生编译器与通用运行时执行源文本,包括局部声明的变量、函数、循环、字段变更、locale 请求和记录的主机传输响应

Concat、Len、Left、Right、Substr、Replace、Lower、Upper、Trim 和 Space 作用于带引号字面量与字段引用;数值子表达式会自动转成文本

日期函数

原生标量求值器用 Date2Num 和 Num2Date 转换 ISO YYYY-MM-DD 文本;FormCalc 序列日以 1900-01-01 为第 1 天,Date() 返回今天的序列值

启用 EnableJavaScript 的一般执行还通过 Date2Num(value, picture, locale)、Num2Date(serial, picture, locale)、DateFmt、TimeFmt、IsoTime2Num、Time2Num、Num2Time、Num2GMTime 和 Time 支持 locale picture

在一般执行中,省略 Num2Date picture 时现在使用环境 locale 的默认模式;请显式传入 "YYYY-MM-DD" 以保留早先的 ISO 输出,严格 ISO 输入则使用 IsoDate2Num

FormCalc Locale and Picture Functions 记录参数、继承的 locale 选择、内嵌 localeSet 覆盖、数值/文本 picture、单位、编码和数字词

Advanced Picture Clauses 记录科学记数、显式小数精度、序数与 ISO 周日期、时钟变体、全局符号以及在一般事件、计算和校验中的复合解析

财务函数

财务函数在原生计算求值器与一般事件编译器中遵循 XFA FormCalc 参数语义

函数参数与结果
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)

非法的财务定义域会原子拒绝一般事件;原生计算求值器报告表达式失败,迭代消耗配置的操作与时间预算

一般事件库

一般 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) 表达式提供设界的条件控制流

Sum、Avg、Min、Max 和 Count 接受 rows[*].amount 这类重复数值选择器,其普通参数列表形式继续聚合标量表达式

动态实例请求

InstanceAdd(name, count) 和 InstanceRemove(name, index) 调用调用方配置的已验证实例回调,并返回最终的实例数

可选的 QuickJS 路径、类型化数组、运行时隔离、预算与遥测见 Bounded XFA FormCalc and JavaScript

显式 HTTP 传输

一般事件脚本通过显式应用主机传输支持大小写不敏感的 Get、Post 与 Put;参数按顺序转发,响应由应用提供

这些函数要求 widget 运行时启用 EnableJavaScript 并配置 HostTransport 回调;原生标量求值器不发起网络请求