一尘不染

fmt:formatNumber舍入不一致

jsp

我不知道是不是我

<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

阅读 332

收藏
2020-06-08

共1个答案

一尘不染

我认为原因可能是容器对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(最近的偶数邻居)。

2020-06-08