fmt:formatNumber舍入不一致

dri*_*hev 1 jsp jstl

我不知道这只是我,但是

<fmt:formatNumber var="roundedNumber" value="2.5" type="number" pattern="#" />
Run Code Online (Sandbox Code Playgroud)

给我

<%-- ${roundedNumber} == 2 --%>
Run Code Online (Sandbox Code Playgroud)

你知道为什么formatNumber不将这个舍入为3吗?

UPDATE

似乎如果数字是ODD正确舍入,但如果它是偶数,则不是.

2.5 will be rounded 2
2.51 will be rounded 3
3.5 will be rounded 4
3.51 will be rounded 4
4.5 will be rounded 4
4.51 will be rounded 5
... etc
Run Code Online (Sandbox Code Playgroud)

Ale*_*dom 6

我认为原因可能是容器实现了JSTL,但同样的事情发生在我身上.

然后我读的JavaServer Pages标准标记库1.0版规范,并在部分9.7 FMT:formatNumber段落标题说明它说,通过模式属性指定的模式字符串必须遵循类java.text.DecimalFormat指定的模式语法.

于是我抬起头的Java文档java.text.DecimalFormat中和在题为部分四舍五入它指出,在默认情况下,它使用的RoundingMode.HALF_EVEN模式圆.该模式将数字向"最近邻居"舍入,除非两个邻居都是等距的,在这种情况下,朝向偶数邻居舍入.

这就解释了为什么2.5轮到2轮(最近的偶数邻居)和3.5轮到4轮(最近的偶数邻居).