1

私だけかどうかわかりませんが、

<fmt:formatNumber var="roundedNumber" value="2.5" type="number" pattern="#" />

私にくれます

<%-- ${roundedNumber} == 2 --%>

formatNumber がこれを 3 に丸めない理由を知っていますか?

アップデート

数値が奇数の場合は正しく丸められているようですが、偶数の場合はそうではありません。

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
4

1 に答える 1

7

原因はコンテナによるJSTLの実装かもしれないと思ったのですが、同じことが起こります。

次に、JavaServer Pages Standard Tag Library バージョン 1.0仕様を読み、説明と題された段落のセクション 9.7 fmt:formatNumberで、パターン属性を介して指定されたパターン文字列は、クラス java.text.DecimalFormat によって指定されたパターン構文に従う必要があると述べています。

そこで、 java.text.DecimalFormatの Java ドキュメントを調べたところ、Roundingというタイトルのセクションで、デフォルトではRoundingMode.HALF_EVENモードを使用して丸めていることが示されています。このモードは、両方の隣接点が等距離でない限り、「最も近い隣接点」に向かって数値を丸めます。この場合、偶数の隣接点に向かって丸めます。

これにより、2.5 が 2 (最も近い偶数近傍) に丸められ、3.5 が 4 (最も近い偶数近傍) に丸められる理由が説明されます。

于 2013-10-11T17:34:50.820 に答える