8

Java ( How to convert byte size into human directional format in java?、およびFormat file size as MB, GB etc ) やGroovy/Grails、さらにはPHPについてのこの質問に対する回答はたくさんありますが、 FreeMarkerでこれを行うための組み込みまたは便利な方法は?

明確にするために、私は 2 の 2 乗ではなく、一般的な用語で一般的な SI メソッドを使用しています。

      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 に答える