如何在 FreeMarker 中汇总货币?

How to total currencies in FreeMarker?

如何在 FreeMarker 中对数据进行制表,同时仍保持精度和 not losing cents due to double of float reprensations

<#assign totalSalaries = 0>

<#list employees as employee>
    <#assign totalSalaries = totalSalaries + emplpoyee.salary>
</#list>

${totalSalaries?string.currency}

就个人而言,我更喜欢使用多头并将所有内容都以美分表示,但我找不到将其转换为货币价值的简单解决方案。无论哪种方式,如果我使用 longBigDecimal(很容易将带有美分的 long 转换为 BigDecimal),我如何保证打印出的总工资不会因精度错误而丢失任何美分双打或花车?也就是说,FreeMarker是如何决定定义total的变量类型的?

FreeMarker 使用 ArithmeticEngine 进行计算(以及其中需要的数字类型转换),这是一个配置设置。该设置的默认设置是 BigDecimalEngine,它在对它们进行任何操作之前将所有内容转换为 BigDecimal,并将结果也保持为 BigDecimal。所以至少在默认情况下你不会丢失任何数字。