登录
首页 >  文章 >  java教程

FreeMarker保留两位小数格式化方法

时间:2026-02-11 17:45:52 427浏览 收藏

本篇文章给大家分享《FreeMarker 格式化数字保留两位小数的方法》,覆盖了文章的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

FreeMarker 中如何强制显示两位小数(包括 .00)

在 FreeMarker 模板中,`Double` 类型本身不保存小数位信息,需通过格式化指令(如 `?string('0.00')`)显式指定两位小数输出,确保 `100.0` 或 `100.00` 均渲染为 `100.00`。

当使用 OpenHTMLToPDF 渲染 PDF 时,常遇到数值字段显示不一致的问题:字符串 "1200.00" 能原样输出,但 Double 类型的 100.00 却被默认格式化为 100——这是因为 FreeMarker 对数字的默认输出会省略无意义的小数位(如 100.00 → 100),而该行为由底层 NumberFormat 决定,与原始值是否含 .00 无关。

✅ 正确做法是使用内建的字符串格式化指令 ?string(pattern),配合 Java DecimalFormat 兼容的模式:

${price?string('0.00')}     <!-- 输出:100.00、0.50、-3.14 -->
${amount?string('#,##0.00')} <!-- 支持千分位:1,234.56 -->

⚠️ 注意事项:

  • ?string('0.00') 强制补零:100 → 100.00,0 → 0.00,123.4 → 123.40;
  • 避免使用 ?c(计算机格式)或默认输出,它们不保证小数位数;
  • 若项目中大量使用统一格式,可全局配置默认数字格式:
    configuration.setNumberFormat("0.00"); // Java 端设置

    或在模板中定义宏复用:

    <#macro fmt00 num><#-- 两位小数格式化 -->${num?string('0.00')}</#macro>
    <@fmt00 price />

? 总结:FreeMarker 中数字的“外观”完全取决于格式化策略,而非原始类型。对 PDF 打印等要求精确格式的场景,务必显式调用 ?string('0.00'),这是最直接、可靠且无需修改业务逻辑的解决方案。

本篇关于《FreeMarker保留两位小数格式化方法》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>