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 回调;原生标量求值器不发起网络请求