freemarker中两个数字的划分 - 结果不正确

问题描述 投票:0回答:1

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

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}
syntax configuration freemarker
1个回答
1
投票

您的number_format配置设置必须类似于'0',因此当数字转换为字符串时,小数将丢失。我永远不会使用这样的number_format,因为它令人困惑。有了像number_format这样的常见'0.####',你得到5.6,因为5/6确实是5.6,如果你需要对它进行操作,那么你需要明确它。现在,如果您确定要在格式化过程中删除小数(但我认为这是一种危险的做法),那么使用像number_format这样的'0;;roundingMode=floor'(自FreeMarker 2.3.24起),然后${28/5}将打印5

另一个可能更好的解决方案是,如果两个数字都是整数Java类型,那么就进行整数除法(如Java)。这可以通过将arithmetic_engine配置设置为conservative来实现。这通常不是一个好的做法,因为模板语言没有声明变量的类型,所以a/b将会做什么并不明显。随着数据模型的发展,您从BigDecimal切换到整数Java类型,这可能导致错误的输出。

© www.soinside.com 2019 - 2024. All rights reserved.