【问题标题】:Modulos function in freemarker truncating resultfreemarker截断结果中的模函数
【发布时间】: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 在此之前没有初始化,所以我相信如果我尝试在其中存储一个浮点数,它应该保持一个浮点数。

This is the calculation I'm trying to replicate

【问题讨论】:

  • 我找到了解决方法,但我更喜欢实际使用 % 运算符的更优雅的解决方案,我很好奇为什么我似乎无法将内置应用于得到一个可行的结果。 <#assign temp_var = ((2503.638/7)?float - (2503.638/7)?int)*7?float> 似乎工作正常..
  • 您上面的答案是唯一有效的答案。我遇到了同样的问题,问题是 2503.638 % 1 is always = 0

标签: freemarker modulo


【解决方案1】:

我可以确认% 给出了整数除法的余数。它将两个参数转换(截断)为整数,然后计算余数。这肯定很奇怪,但由于向后兼容性而无法更改。主要应用程序是计算“斑马表”之类的,我不知道它在哪里可能还好……它在项目的早期就这样进入,然后卡住了。

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 2012-08-13
    • 1970-01-01
    • 2019-12-19
    • 2013-08-28
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多