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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了freemarker中两个数字的划分 - 结果不正确相关的知识,希望对你有一定的参考价值。

我正在使用带有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}
答案

您的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类型,这可能导致错误的输出。

以上是关于freemarker中两个数字的划分 - 结果不正确的主要内容,如果未能解决你的问题,请参考以下文章

Intl.NumberFormat 返回数字和货币符号通过间距划分的结果

如何用freemarker循环一个数字

如何使用 freemarker 将字符串转换为数字?

Freemarker:将日期从科学记数法转换为数字

freemarker框架 在easyui页面中处理数字 比如在页面得到1,234

如何在freemarker中自定义数字格式?