我不知道这只是我,但是
<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)
我认为原因可能是容器实现了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轮(最近的偶数邻居).