Syntax freemarker中两个数字的除法-结果不正确

Syntax freemarker中两个数字的除法-结果不正确,syntax,configuration,freemarker,Syntax,Configuration,Freemarker,我正在使用freemarker 2.3.26与Kotlin。我的模板中有两个变量,我需要将它们分开 Variable ${a} is Int and its value is 28. Variable ${b} is Int and its value is 5. Output of ${a/b} should be 5, but really it is 6. 我发现这可能是由舍入引起的 28/5 = 5.6 = rounds to 6 如何正确处理??还有比这更优雅的方式吗 ${(a/

我正在使用freemarker 2.3.26与Kotlin。我的模板中有两个变量,我需要将它们分开

Variable ${a} is Int and its value is 28.
Variable ${b} is Int and its value is 5.
Output of ${a/b} should be 5, but really it is 6. 
我发现这可能是由舍入引起的

28/5 = 5.6 = rounds to 6
如何正确处理??还有比这更优雅的方式吗

${(a/b)?floor}
您的数字\格式配置设置必须类似于“0”,因此当数字转换为字符串时,小数将丢失。我永远不会使用这样的数字格式,因为它很混乱。使用像“0”这样的常用数字格式,您得到的是5.6,因为5/6实际上是5.6,如果您需要设置它,那么您需要明确它。现在,如果您确定要在格式化过程中删除小数,但我认为这是一种危险的做法,那么请使用类似“0”的数字格式;;从FreeMarker 2.3.24开始,roundingMode=floor,然后${28/5}将打印5


另一个可能更好的解决方案是,如果两个数字都是整数Java类型,那么您可以像Java一样进行整数除法。这可以通过将“算术引擎配置”设置设置为“保守”来实现。一般来说,这也不是一个好的实践,因为模板语言没有声明变量的类型,所以a/b的作用并不明显。随着数据模型的发展,您从BigDecimal切换到integer Java类型,这可能会导致错误的输出。

为什么它不优雅?它相当长,尤其是当变量名较长时。而且它在模板代码中添加了不必要的噪声。我理解为什么结果是6,但它有点混乱,我希望它是5:谢谢。我正在做一个更大的项目,我发现我们的数字格式设置为。使用,我可以在本地更改它,如下所示:,但似乎没有办法将其更改回:如果您的意思是这样的话,目前没有功能恢复早期的数字格式。当然,如果你可以打电话的话,但这显然不是一个很容易维护的方法。但是,我不确定项目中是否有人想要默认值。。。这可能只是一个错误,应该向负责的团队报告。是的,这正是我的想法:我找到了一个解决方法-将默认格式设置为某个模板变量,然后执行。这是可行的,可能更易于维护,但并不理想。我还将在我们的团队中讨论默认设置——也许我不需要任何变通方法:@AlešZrak您所说的变通方法并不是恢复数字格式的解决方案。但这可能不是你想要的,这两个功能可能会很有趣,你可以查看FreeMarker手册了解详细信息:1。通过模板配置设置,数字格式和大多数其他设置可以取决于主顶级模板的路径/名称。2.自定义_number_formats设置允许全局注册命名格式,就像将物理注册为0的别名一样,然后写入。