我想将具有任意数量的跟踪零的 BigDecimal
值按原样复制到 Freemarker 模板中(例如,如果调用 value.toString()
在 Java 结果 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
,则格式设置不会考虑区域设置
。所以你的小数点分隔符在某些语言中会是错误的。
关于java - Freemarker:在 BigDecimal 中保留尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55402193/