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 返回数字和货币符号通过间距划分的结果