Freemarker字符串转数字不四舍五入并取绝对值问题求助
Freemarker字符串转数字保留精度并取绝对值解决方案
核心问题出在?number内置函数——它会按照Freemarker默认的数值格式规则自动四舍五入,导致原始小数精度丢失。改用?big_decimal转换可以完美保留字符串的精确数值,再进行后续的绝对值处理。
修改后的代码如下:
<#if a.value?is_string> <#assign num = a.value?big_decimal> <#if num < 0> "aValue": "${num?abs}" <#else> "aValue": "${a.value}" </#if> </#if>
关键说明:
?big_decimal:将字符串转换为BigDecimal类型,完全保留原始数值的所有小数位,不会触发任何自动四舍五入操作。- 先赋值给变量
num:避免重复执行字符串转数值操作,提升模板执行效率。 - 正负判断与绝对值处理:基于精确的BigDecimal数值判断正负,负数调用
?abs获取绝对值后输出,正数直接输出原字符串(也可以用num输出,结果一致)。
内容的提问来源于stack exchange,提问作者Amila Fonseka
相关产品推荐
相关产品推荐

