对于Java(How to convert byte size into human readable format in java?,Format file size as MB, GB etc)和even for Groovy/Grails这个问题有很多答案,更不用说PHP了,但是内置了吗?或者在FreeMarker中做到这一点的便捷方式?
为清楚起见,我采用通用SI方法,而不是2的二进制幂。例如。
1 ➤ 1B
123 ➤ 123B
1000 ➤ 1KB
1728 ➤ 1.7KB
7077888 ➤ 7.1MB
等等。
鉴于FreeMarker似乎没有对数函数,有没有办法在纯FreeMarker中执行此操作,或者是我用Java创建模板方法的唯一选择。
答案 0 :(得分:3)
如果有人对此感兴趣,我在使用字符串操作编写代码时遇到了麻烦。如果你可以避免,我不会建议做这样的事情,但是如果你遇到困难,它可能会有所帮助:
<#--
# Format Number of Bytes in SI Units
# -->
<#function si num>
<#assign order = num?round?c?length />
<#assign thousands = ((order - 1) / 3)?floor />
<#if (thousands < 0)><#assign thousands = 0 /></#if>
<#assign siMap = [ {"factor": 1, "unit": ""}, {"factor": 1000, "unit": "K"}, {"factor": 1000000, "unit": "M"}, {"factor": 1000000000, "unit":"G"}, {"factor": 1000000000000, "unit": "T"} ]/>
<#assign siStr = (num / (siMap[thousands].factor))?string("0.#") + siMap[thousands].unit />
<#return siStr />
</#function>
答案 1 :(得分:0)
不,内置的功能没有.BTW,应该只是一个number_format
模式,但是DecimalFormat
没有这样做的模式,所以FreeMarker也没有。