#{...}:数值插补

Page Contents

不推荐使用:请改用number_format setting内置字符串。要为计算机 Spectator 设置格式(即不进行本地化格式设置),请使用c built-in(例如number?c)。

虽然默认情况下会解释#{...},但是可以通过将interpolation_syntax配置设置(Java API 中的Configuration.setInterpolationSyntax)设置为dollar来禁用它。然后#{...}只是静态文本,只有${...}将用作插值。

Synopsis

#{expression}
or
#{expression; format}

Where:

  • expression:可以计算为数字的表达式。

  • format:可选格式说明符。

Description

数字插值用于输出数字值。如果表达式的计算结果不是数字,则计算结果以错误结束。

可选格式说明符使用语法mminMmax指定显示的小数位数的最小和最大数目。例如,m2M5表示“至少两个,最多五个小数位”。最小或最大说明符部分可以省略。如果仅指定最小值,则最大值等于最小值。如果仅指定最大值,则最小值为 0.

输出的小数点分隔符已国际化(根据当前的语言环境设置),这意味着它不一定是点。

${...}不同,#{...}忽略了number_format setting。这实际上是一个向后兼容的怪癖,但是在诸如<a href="queryDatabase?id=#{id}">的情况下打印数字时肯定很有用,在这种情况下,您肯定不希望对分隔符或类似的东西进行分组。但是,从 FreeMarker 2.3.3 开始,而不是为此使用?c built-in,例如<a href="queryDatabase?id=${id?c}">

例子。假设x2.582y4

<#-- If the language is US English the output is: -->
#{x}       <#-- 2.582 -->
#{y}       <#-- 4 -->
#{x; M2}   <#-- 2.58 -->
#{y; M2}   <#-- 4    -->
#{x; m1}   <#-- 2.6 -->
#{y; m1}   <#-- 4.0 -->
#{x; m1M2} <#-- 2.58 -->
#{y; m1M2} <#-- 4.0  -->