我想将具有任意数量的零值的BigDecimal
值照原样复制到Freemarker模板中(例如,如果在Java中调用value.toString()
会导致123.0000
,我想确切地将123.0000
插入模板)。
但是,使用内置函数(如?string
)或仅使用${valueWithZeroes}
似乎总是将尾随的零去除。使用?string[...]
是不可能的,因为尾随零的确切数目是未知的。 AFAIK,有一种方法可以使用BigDecimal
从Freemarker模板调用toString
自己的?api
方法-但是,文档似乎不鼓励这样做。因此,我想知道是否还有其他方法可以使用Freemarker本身来实现该目标,而又不依赖Java方法。
答案 0 :(得分:1)
我相信java.text.DecimalFormat
无法做到这一点,因此FreeMarker不能开箱即用。但是,您可以定义自己的CustomNumberFormatFactory
,并尽一切可能在Java中进行。请参见此处的示例:https://freemarker.apache.org/docs/pgui_config_custom_formats.html。
因此,您可以在此处进行类似HexTemplateNumberFormatFactory
的操作,还可以将自定义数字格式设置为默认数字格式(通过在示例中将number_format
设置为"@hex"
)。
请注意,如果您仅按原样使用BigDecimal.toString
,则格式不会考虑Locale
。因此,您的小数点分隔符在某些语言中是错误的。