昨日、DecimalFormatメソッド.format()のすべてのプレースホルダとその振る舞いを自分自身で調べようとしました。
私は2つの数字を書いて、それらに異なるパターンを試しました。 "#。##"を使用すると、有意でないすべてのゼロが切り捨てられ、 "0000.00"の場合、このメソッドは数値の先頭にゼロを追加しました。それは問題ありませんでしたが、何が起こるかを見るためにいくつかの奇妙なパターンを試しました。
"33333。##"というパターンでは、最終的な出力は本当に奇妙でした。あなたは以下の私のコードを見ることができる:DecimalFormatメソッド.format()を使用するとパターン "33333。##"があまりにも奇妙に動作するのはなぜですか?
DecimalFormat df = new DecimalFormat("33332.##");
double a= 222.46705219;
double b=-102.000;
System.out.println(df.format(a));
System.out.println(df.format(b));
し、その出力された:
33332222,47
-2,0
に同じ入力を数値としてではなく使用済みのパターンで結果を与えた "33033 ##。":
33222,4732
33102
私はプログラムが0の代わりにフォーマットされた数字を追加したが、なぜゼロがプレースホルダーとして提示されないと、メソッドはまだ最初と(明らかに)2番目の数字を丸めるのだろうか?
なぜ私の最初の数字は2番目の数字に丸められていなければならなかったのですが、2番目の数字(b)は最後に0が印刷されていましたか?
なぜ、0プレースホルダが "33033。##"の真中に表示されると、プログラムはフォーマットされた番号aをその場所に挿入しますが、番号bの最後に "33"
私は本当にこの動作を説明する方法を知らない。
ええ、私はそれらが無効であることを知っていますが、それはすべてのパターンが番号bとは異なる方法で番号aを扱う理由を説明していません。例題を見てください - パターン "33332。##"は小数点記号の後の2桁目に "a"を書いていますが、 "b"は最初のものに書式化されています。 –
私が言っていることは、それが無効であるため結果が予測できないということです。これにはいくつかの理由がありますが、警告なく変更されることはないと信じる理由はありません。 –