如何将字符串格式的十进制数四舍五入保留两位小数并格式化
FreeMarker 四舍五入保留两位小数实现方案
你当前使用的0.##格式符无法补后导0的核心原因是:#属于可选占位符,对应位置无数字时会自动省略,要实现固定保留两位小数、不足补0的需求,只需要将?string的参数替换为0.00即可。
格式符规则说明
- 格式符中的
0是强制占位符:对应位置没有数字时会自动补0 - 格式符中的
#是可选占位符:对应位置没有数字时会自动省略
最终可用代码
<#return value?number?string('0.00')/>
场景验证结果
对应你给出的测试用例,输出结果完全符合预期:
- 2222.333333 → 2222.33
- 51.22 → 51.22
- 27.0012 → 27.00
- 37.28945 → 37.29
- 7891.1 → 7891.10
补充说明
如果从XML中读取的字符串可能存在非数字格式的异常值,可以先增加合法性判断避免转换报错,示例逻辑如下:
<#if value?is_number> <#return value?number?string('0.00')/> <#else> <#-- 自定义异常值处理逻辑,比如返回默认值等 --> </#if>
内容的提问来源于stack exchange,提问作者sjo11223
相关产品推荐
相关产品推荐

