Freemarker:在 BigDecimal 中保留尾随零

Freemarker: keep trailing zeroes in BigDecimal

我想按原样将具有任意数量的尾随零的 BigDecimal 值复制到 Freemarker 模板中(例如,如果在 Java 中调用 value.toString() 结果123.0000,我想准确地看到 123.0000 插入到模板中)。

但是,使用内置函数(如 ?string)或仅使用 ${valueWithZeroes} 似乎总是会去除尾随零。使用 ?string[...] 是不可能的,因为尾随零的确切数量是未知的。 AFAIK,有一种方法可以使用 ?api 从 Freemarker 模板调用 BigDecimal 自己的 toString 方法 - 但是,文档似乎不鼓励这样做。所以我想知道是否有任何其他方法可以使用 Freemarker 本身来实现这一点,而不会退回到 Java 方法。

我相信 java.text.DecimalFormat 不能那样做,因此 FreeMarker 不能开箱即用。但是,您可以定义自己的 CustomNumberFormatFactory,并在 Java 中做任何可能的事情。请参阅此处的示例:https://freemarker.apache.org/docs/pgui_config_custom_formats.html。 所以你在那里做类似 HexTemplateNumberFormatFactory 的事情,你也可以将自定义数字格式设置为默认数字格式(通过在示例中将 number_format 设置为 "@hex")。

请注意,如果您只是按原样使用 BigDecimal.toString,则格式不会考虑 Locale。所以你的小数点分隔符在某些语言中是错误的。