我不知道这只是我,但是
<fmt:formatNumber var="roundedNumber" value="2.5" type="number" pattern="#" />
给了我
<%-- ${roundedNumber} == 2 --%>
你知道为什么formatNumber不将它舍入到3?
更新
似乎如果数字是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
答案 0 :(得分:6)
我认为原因可能是容器实现了JSTL,但同样的事情发生在我身上。
然后,我在标题为说明的段落中阅读了JavaServer Pages Standard Tag Library version 1.0规范和第9.7节fmt:formatNumber ,它说明了通过模式属性指定的模式字符串必须遵循模式语法 由类java.text.DecimalFormat。
指定所以我查找了java.text.DecimalFormat的java文档,在标题为舍入的部分中,它声明默认情况下它使用RoundingMode.HALF_EVEN模式进行舍入。该模式将数字向“最近邻居”舍入,除非两个邻居都是等距的,在这种情况下,朝向偶数邻居舍入。
然后解释为什么2.5轮到2轮(最近的偶数邻居)和3.5轮到4轮(最近的偶数邻居)。