【发布时间】:2016-10-12 15:12:33
【问题描述】:
我正在尝试在 freemarker 模板中进行“复杂计算”。计算需要模数调用。起初我一直在简化我的代码,最后只是硬编码值来尝试找出原因,但似乎 freemarker 的 mod 函数总是返回 int 值?但它们甚至没有四舍五入,它们被截断了。我需要它们四舍五入(0.5 向上可以)。我最简化的不起作用的代码是:
<#assign p_year_m1 = (2503.638 % 7.00)?float>
较长的版本是:
<#assign p_year_m1 = ((bdy_m1 + (bdy_m1/4.0)-(bdy_m1/100.0)+(bdy_m1/400.0)))%7>
所以正确答案应该是 4.638,四舍五入到 5,但即使我将 ?string[0.00] 包裹起来,我也会得到 4.00。
我错过了什么?当然必须有一种方法来完成这项工作!如果没有,我想我需要帮助构建一个变通方案以获得类似的结果。
谢谢。
PS - var, p_year_m1 在此之前没有初始化,所以我相信如果我尝试在其中存储一个浮点数,它应该保持一个浮点数。
【问题讨论】:
-
我找到了解决方法,但我更喜欢实际使用 % 运算符的更优雅的解决方案,我很好奇为什么我似乎无法将内置应用于得到一个可行的结果。
<#assign temp_var = ((2503.638/7)?float - (2503.638/7)?int)*7?float>似乎工作正常.. -
您上面的答案是唯一有效的答案。我遇到了同样的问题,问题是 2503.638 % 1 is always = 0
标签: freemarker modulo