添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

相关的FAQ:如果有和 1,000,000 或 1 000 000 而不是 1000000 类似的东西, 或者是 3.14 而不是 3,14 的东西,反之亦然,请参考 这里 这里 FAQ中相关内容, 也要注意上述内容中的内建函数 c

它根据程序语言的用法来进行格式化, 这对于 FreeMarker 的所有本地数字格式化设置来说是独立的。 它通常使用点来作为小数分隔符,而且它从来不用分组分隔符(像3,000,000), 指数形式(比如5E20),多余的在开头或结尾的0(比如03或1.0),还有+号(比如+1)。 它最多在小数点后打印16位,因此数值的绝对值小于1E-16将会显示为0。 该内建函数非常严格,因为作为默认(像 ${x} 这样) 数字被本地(语言,国家)特定的数字格式转换为字符串,这是让用户来看的 (比如3000000可能会被打印为3,000,000)。当数字不对用户打印时 (比如,对于一个数据库记录ID,用作是URL的一部分,或者是HTML表单中的隐藏域, 或者打印CSS/JavaScript的数值文本),该内建函数必须被用来打印数字 (也就是使用 ${x?c} 来代替 ${x} ), 否则输出可能由于当前数字格式设置,本地化 (比如在一些国家中,小数点不是点,而是逗号)和数值 (像大数可能被分组分隔符"损坏")而损坏。

如果 FreeMarker 配置设置项 incompatible_imporvements 为 2.3.21 (或更高),该内建函数将会对正无穷/负无穷,IEEE非浮点数各自返回 "INF" "-INF" "NaN" 。这是这些特殊值的XML Schema兼容性表现。 (之前它会返回US本地化下的 java.text.DecimalFormat , 不被任意(通用)计算机语言所理解。)

请注意,该内建函数 也对布尔值起作用

-1.5, 0.25, -0.25, 1.75, -1.75]> <#list testlist as result> ${result} ?floor=${result?floor} ?ceiling=${result?ceiling} ?round=${result?round} </#list>
    0 ?floor=0 ?ceiling=0 ?round=0            
    1 ?floor=1 ?ceiling=1 ?round=1        
    -1 ?floor=-1 ?ceiling=-1 ?round=-1      
    0.5 ?floor=0 ?ceiling=1 ?round=1      
    1.5 ?floor=1 ?ceiling=2 ?round=2      
    -0.5 ?floor=-1 ?ceiling=0 ?round=0     
    -1.5 ?floor=-2 ?ceiling=-1 ?round=-1    
    0.25 ?floor=0 ?ceiling=1 ?round=0     
    -0.25 ?floor=-1 ?ceiling=0 ?round=0    
    1.75 ?floor=1 ?ceiling=2 ?round=2     
    -1.75 ?floor=-2 ?ceiling=-1 ?round=-2

这些内建函数在分页处理时也许有用。如果你仅仅想 展示 数字的舍入形式,那么应该使用 string 内建函数 或者 number_format ${1.2?string["0"]} ${1.8?string["0"]} ${1.5?string["0"]} <-- 1.5, rounded towards even neighbor ${2.5?string["0"]} <-- 2.5, rounded towards even neighbor ${12345?string["0.##E0"]}

将会输出:

1.234 1.234 001.00 012.10 123.46 2 <-- 1.5, rounded towards even neighbor 2 <-- 2.5, rounded towards even neighbor 1.23E4

请注意,在 FreeMarker 中, foo.bar foo["bar"] 是相同的,也可以将 x?string.currency 写为 x?string["currency"] ,当然实际中不这么用。 但是在上述示例中,我们不得不使用方括号语法,因为在语法上, 使用的字符(数字,点, # )不允许在点操作符之后。

由于历史原因,也可以编写如下代码 x?string("0.#") ,它和 x?string["0.#"] 完全相同。

在金融和统计学实践中,四舍五入都是根据所谓的一半原则, 这就意味着对最近的"邻居"进行四舍五入,除非离两个邻居距离相等, 这种情况下,它四舍五入到偶数的邻居。如果你注意看1.5和2.5的四舍五入的话, 这在上面的示例中是可以看到的,两个都被四舍五入到2,因为2是偶数,但1和3是奇数。

正如之前展示的预定义格式,数字的默认格式可以在模板中设置:

<#setting number_format="0.##">
${1.234}

将会输出:

请注意,数字格式是本地化敏感的,本地化设置在格式化中起作用:

<#setting number_format=",##0.00">
<#setting locale="en_US">
US people write:     ${12345678}
<#setting locale="hu">
German people write: ${12345678}

将会输出:

US people write:     12,345,678.00
German people write: 12.345.678,00