Играя с double
форматированием строки, я заметил, что, по крайней мере, в моей локали строки, созданные по умолчанию DecimalFormat
, отличаются от тех, которые генерируются Double.toString()
когда дело доходит до особых случаев, таких как Infinity
и NaN
.Например, из этого фрагмента:
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
, но мне кажется, что мне придется самостоятельно устанавливать все связанные поля, что звучит несколько хрупко.Есть ли способ избежать этого?