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
。所以你的小数点分隔符在某些语言中是错误的。
我想按原样将具有任意数量的尾随零的 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
。所以你的小数点分隔符在某些语言中是错误的。