这个问题对于 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 创建模板方法的唯一选择。
最佳答案
如果有人感兴趣,我自己尝试使用字符串操作编写一些代码。如果您可以避免的话,我不建议您这样做,但如果您遇到困难,它可能会有所帮助:
<#--
# 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>
关于string - 在 Freemarker 中是否有一种方便的方法来格式化人类可读的字节大小字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20602784/