我不知道是不是我
<fmt:formatNumber var="roundedNumber" value="2.5" type="number" pattern="#" />
给我
<%-- ${roundedNumber} == 2 --%>
您知道为什么formatNumber不将其四舍五入吗?
更新
看来,如果数字是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
我认为原因可能是容器对JSTL的实现,但同样的事情发生在我身上。
然后,我阅读了JavaServer Pages标准标记库1.0版规范,并在标题为“ 描述”的* 9.7节fmt:formatNumber 中说,它指出了通过pattern属性指定的模式字符串必须遵循类java.text.DecimalFormat指定的模式语法。 *
因此,我查找了java.text.DecimalFormat的Java文档,并在标题为“ 舍入” 的部分中指出,默认情况下,它使用RoundingMode.HALF_EVEN模式进行舍入。除非两个邻居都是等距的,否则此模式会将数字四舍五入为“最近的邻居”,在这种情况下,将四舍五入为偶数邻居。
这就解释了为什么2.5舍入到2(最近的偶数邻居)和3.5舍入到4(最近的偶数邻居)。