You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Freemarker保留double类型小数点后末尾零的实现方法

在Freemarker中保留带末尾零的数值格式

首先要明确:double类型本身不会存储小数部分末尾零的信息,比如1.0和1在内存中是完全相同的double值,这也是你用?string无法区分它们的原因。要实现需求,核心是让数据源保留原始数值的精度信息,具体可以按以下方式处理:

方法一:改用BigDecimal存储数值

在后端将double类型替换为BigDecimal,并且使用字符串构造器初始化(避免浮点数精度丢失),比如:

// 保留1.0的精度
BigDecimal num1 = new BigDecimal("1.0");
// 保留1.001的精度
BigDecimal num2 = new BigDecimal("1.001");

将这些BigDecimal对象传入Freemarker后,直接输出或使用?string指令即可原样显示:

${num1} <!-- 输出1.0 -->
${num2} <!-- 输出1.001 -->
${num1?string} <!-- 同样输出1.0 -->

方法二:后端转换为字符串传递

如果无法修改后端数值类型,可在后端将double值按原始格式转换为字符串后再传给Freemarker,前端直接输出字符串即可:

// 后端示例:将数值转为带指定格式的字符串
String numStr1 = String.format("%.1f", 1.0); // 得到"1.0"
String numStr3 = String.format("%.3f", 4.0); // 得到"4.000"

Freemarker中直接输出:

${numStr1} <!-- 输出1.0 -->
${numStr3} <!-- 输出4.000 -->

注意事项

  • 不要直接用double类型处理需要保留末尾零的场景,因为它无法区分1和1.0;
  • 如果必须在Freemarker中处理且已知小数位数固定,可以用?string["0.0"]这类格式化指令,但你提到末尾零数量未知,所以这种方法不适用。

内容的提问来源于stack exchange,提问作者Hemanth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:31:41