On this page
#{...}: Numerical interpolation
Deprecated: Use the number_format
setting and the string
built-in instead. For formatting for computer audience (i.e., no localized formatting) use the c
built-in (like number?c
).
While by default #{...}
is interpreted, that can be disabled by setting the interpolation_syntax
configuration setting (Configuration.setInterpolationSyntax
in the Java API) to dollar
. Then #{...}
will be just static text, and only ${...}
will operate as interpolation.
Synopsis
#{expression}
or#{expression; format}
Where:
expression
: expression that can be evaluated as a number.format
: optional format specifier.
Description
The numerical interpolation is used to output a number value. If the expression doesn't evaluate to a number, the evaluation ends with an error.
The optional format specifier specifies the minimum and the maximum number of displayed fractional digits using syntax mminMmax
. For example, m2M5
means "at least two, at most five fractional digits". The minimum or the maximum specifier part can be omitted. If only the minimum is specified, the maximum is equal to the minimum. If only maximum is specified, the minimum is 0.
The decimal separator character of the output is internationalized (according the current locale setting), which means that it is not necessarily a dot.
Unlike ${...}
, #{...}
ignores the number_format
setting. This is actually a backward compatibility quirk, but it can be useful when you print numbers in situations like <a href="queryDatabase?id=#{id}">
, where you surely don't want grouping separators or something fancy like that. However, starting from FreeMarker 2.3.3 rather use the ?c
built-in for this purpose, like <a href="queryDatabase?id=${id?c}">
.
Examples. Assume that x
is 2.582
and y
is 4
:
<#-- 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 -->