Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 有没有一种方便的方法可以在Freemarker中格式化人类可读的字节大小字符串?_String_Numbers_Format_Freemarker_Funnelback - Fatal编程技术网

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

String 有没有一种方便的方法可以在Freemarker中格式化人类可读的字节大小字符串?,string,numbers,format,freemarker,funnelback,String,Numbers,Format,Freemarker,Funnelback,对于Java(、和)这个问题有很多答案,更不用说,但是在FreeMarker中有内置的或方便的方法来实现这一点吗 为了清楚起见,我使用通用的SI方法,而不是2的二元幂。例如 1 ➤ 1B 123 ➤ 123B 1000 ➤ 1KB 1728 ➤ 1.7KB 7077888 ➤ 7.1MB 等等 鉴于FreeMarker似乎没有对数函数,有没有办法在纯FreeMarker中实现这一点,或者是我用Java创建模板方法的唯一选择。没有,没有内置这样的功能。顺便说一句,

对于Java(、和)这个问题有很多答案,更不用说,但是在FreeMarker中有内置的或方便的方法来实现这一点吗

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

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


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

没有,没有内置这样的功能。顺便说一句,这应该只是一个
number\u格式
模式,但是
DecimalFormat
没有这样的模式,所以FreeMarker也没有。

如果有人感兴趣的话,我自己就很擅长使用字符串操作编写代码。如果你可以避免,我不建议你做这样的事情,但如果你陷入困境,这可能会有帮助:

<#--
 # 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>


OK。似乎如果您使用的是Funnelback(就像我一样),那么提供了一个名为
filesize()
的函数来实现所需的结果。FreeMarker本身并不定义
filesize()
。其他东西会把它放在你的环境中。@ddekany是的。我知道。是什么把它放在那里。(无关,但你不需要
()
-s在
#如果
在FreeMarker中。他们什么都不做。)@ddekany你是对的。当然,除非你在做一个“大于”的比较。例如
3)>
。就我个人而言,我喜欢把括号放在那里,这样当我写一篇大于比较的文章时,我就不会忘记它们。