我认为它返回1.13,但同盟者返回1.12。
什么是对的?
${(1.125)?string(",##0.00;roundingMode=HALF_UP")}发布于 2018-03-13 08:28:44
有三个问题:
java.text.DecimalFormat模式的一个非标准扩展,由于DecimalFormat相当宽松,在旧版本上使用它不会导致错误--不幸的是,它只是被误解了。;-s,因为第一个分隔正数和负数模式。halfUp,不是HALF_UP。(使用HALF_UP会给出一个错误消息,但是由于您使用的是太旧的FreeMarker,所以整个事情都被忽略了。)更新: number.html#topic.extendedJavaDecimalFormat现在警告用户注意前两个陷阱。
发布于 2018-03-13 06:16:30
Freemarker是正确的,您可能误解了甚至,它对甚至邻居都是四舍五入。
在您的例子中,2是偶数,所以1.125四舍五入为1.12。
两个邻居都是等距的,在这种情况下,向偶数邻居的方向是圆的。
在共济会中,舍入常数是不同的:
roundingMode值是一个向上,向下,天花板,地板,halfUp,halfDown,halfEven,和不必要的值。
在您的情况下,您可以使用以下方法:
${(1.125)?string(",##0.00;; roundingMode=halfEven")}如果不加任何或不相关的四舍五入,则一半甚至是默认的。
默认情况下是halfEven
修复是在版本2.3.24中。你应该升级你的版本,让它正常工作。
在使用Java DecimalFormat模式的任何地方(比如in ?string('0.##')或<#setting number_format="0.##">),现在都可以指定诸如舍入模式或使用的符号之类的选项,并为DecimalFormat模式语法提供一个特定于FreeMarker的扩展。
发布于 2018-03-13 07:22:06
函数HALF_EVEN是向“最近邻居”的舍入模式,除非两个邻居都是等距的,在这种情况下,是向甚至邻居的舍入。
您的1.125的偶数邻居是1.2,因此该模式运行良好。您可以使用HALF_UP获得1.3的答案。
https://stackoverflow.com/questions/49248852
复制相似问题