double
文字列フォーマットで遊んでいる間、私は、少なくとも私のロケールに、デフォルトDecimalFormat
オブジェクトによって生成される文字列は、それがInfinity
とNaN
のような特殊なケースになるとDouble.toString()
によって生成されたものとは異なっている、ということに気づきました。例えば。このスニペットから:DecimalFormatに特殊記号の代わりにASCII文字列を表示するにはどうすればよいですか?
for (double i : new double[]{ 1/0.0, -1/0.0, 0/0.0 }) {
System.out.println(Double.toString(i));
System.out.println(new DecimalFormat().format(i));
}
私はこの出力を得る:
Infinity
∞
-Infinity
-∞
NaN
�
これはNaN
とInfinity
のために見ている既存のコードに問題が発生していないだけではなく、最後の記号は上のフォントと読めません私の開発システム。私が数値を調べる限り、最後の記号はU+FFFD
のUnicode置換文字です。これは実際に意味のあるものに実際に設定されていないことを意味します。
私のアプリケーションのいくつかのために、私は7ビットのASCII表現を好むので(「あなたが受け入れるものにリベラルてあなたが作るものの中に保守的」)、DecimalFormat
にによって生成文字列を強制的にいくつかの方法がありますDouble.toString()
で生成されたものと一致しますか?
私の場合、DecimalFormatSymbols
を提供するのが1つの方法かもしれませんが、関連するすべてのフィールドを自分で設定する必要があるようですが、やや壊れやすいと思います。それを避ける方法はありますか?
これは、実際の答えのようですので、私はそれがあるとしてがっかり、この答えを受け入れるだろう... – thkala
'getDecimalFormatSymbols'ので、それはのシンボルを変更することはありません修正、内部オブジェクトのコピーを返します。既存のDecimalFormatオブジェクト'setDecimalFormatSymbols'を呼び出すか、DecimalFormatコンストラクタでDecimalFormatSymbolsオブジェクトを渡す必要があります。 – Mikkel
@Mikkelが指摘したように、追加の命令がありません: 'df.setDecimalFormatSymbols(dfs);' – jcfrei