java - Freemarker:在 BigDecimal 中保留尾随零

标签 java freemarker

我想将具有任意数量的跟踪零的 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/

相关文章:

java - 将 Parcelable 对象从 fragment 传递到另一个 fragment

java - 用句点(.)分割的字符串表现出不同的行为

java - 在 JEditorPane 中保留空 HTML 行的格式

java - 如何克服 freemarker 树集按字母顺序排序 int 键?

arrays - 仅在 freemarker 中创建 "object"(无 JAVA 等)?

java - 执行 FreeMarker 时,以下内容已评估为 null 或缺失

java - 带下划线的 RegEx 验证名称

freemarker - 在 Freemarker 宏中模拟空参数

java - 在 freemarker 的选择框中设置当前年份

Javafx 表列使用比较器排序不起作用