有没有一种方便的方法来格式化Freemarker中人类可读的字节大小字符串?

时间:2013-12-16 03:03:35

标签: string numbers format freemarker funnelback

对于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创建模板方法的唯一选择。

2 个答案:

答案 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也没有。