8

对于 Java( How to convert byte size into human readable format in java?Format file size as MB, GB etc),甚至对于 Groovy/Grails ,有很多答案,更不用说PHP,但是有没有在 FreeMarker 中内置或方便的方式来执行此操作?

为了清楚起见,我使用的是通用的 SI 方法,而不是 2 的二进制幂。例如

      1 ➤ 1B
    123 ➤ 123B
   1000 ➤ 1KB
   1728 ➤ 1.7KB
7077888 ➤ 7.1MB

等等。

鉴于 FreeMarker 似乎没有对数函数,有没有办法在纯 FreeMarker 中做到这一点,或者是我使用 Java 创建模板方法的唯一选择。

4

2 回答 2

5

如果有人感兴趣,我可以自己使用字符串操作来编写代码。如果可以避免,我不建议您这样做,但如果您遇到困难,它可能会有所帮助:

<#--
 # 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>
于 2013-12-16T23:14:34.640 回答
0

不,没有内置这样的功能。顺便说一句,这应该只是一种number_format模式,但DecimalFormat没有这样做的模式,所以 FreeMarker 也没有。

于 2013-12-16T17:27:51.803 回答