JavaDocでは2番目の形式が無効であるようですが、何とかエラーが発生しても解析されません。この場合
Pattern:
PositivePattern
PositivePattern ; NegativePattern
PositivePattern:
Prefixopt Number Suffixopt
NegativePattern:
Prefixopt Number Suffixopt
Prefix:
any Unicode characters except \uFFFE, \uFFFF, and special characters
Suffix:
any Unicode characters except \uFFFE, \uFFFF, and special characters
Number:
Integer Exponentopt
Integer . Fraction Exponentopt
Integer:
MinimumInteger
#
# Integer
# , Integer
MinimumInteger:
0
0 MinimumInteger
0 , MinimumInteger
Fraction:
MinimumFractionopt OptionalFractionopt
MinimumFraction:
0 MinimumFractionopt
OptionalFraction:
# OptionalFractionopt
Exponent:
E MinimumExponent
MinimumExponent:
0 MinimumExponentopt
私は、フォーマッタの動作は未定義ことを期待したいです。つまり、それは古いものを生み出すことがあり、一貫性があり意味のあるものに依存することはできません。だから私はあなたがなぜ23.0を手に入れているのか分かりませんが、あなたのコードでは避けるべきではないというのはナンセンスだと推測できます。
更新: Java 7のDecimalFormatライブラリからデバッガを実行しました。このコードでは、 '。#'は許可されていると明示されているだけでなく、許可されていることを示すコメント(java.text.DecimalFormat:2582-2593)とそれを許可する実装(2597行目)があります。これはパターンのBNFに違反しているようです。
これは文書化された動作ではないので、Javaのバージョン間やライブラリ実装間で変更される可能性があるため、実際にはそれに頼るべきではありません。
''。# "'は有効なフォーマットで、 '#。# 'でなければならないのだろうと思っています。その結果も' 23'となります。 – Tom
@Tom:DecimalFormat( "。0")も機能します。 javadocで "。#"のようなものを禁止するものは見ませんでした。 – MGn
* "javadocの中で" "*私のどちらでもないようなものは禁止されていますが、コードがこれを正しく処理できるわけではありません。また、 '。#'や '.0'が無効で、" fallback "は数字を出力するだけで、同じ文字列(' '23.0 '')になるので' 'DecimalFormat ')。しかし、再び、それはちょうど推測です。 – Tom