Java DecimalFormat возвращает "?" - PullRequest
7 голосов
/ 07 апреля 2011

Мой DecimalFormat иногда возвращает '?' при попытке format(). Есть ли вход, который бы создал этот сценарий?

Например:

DecimalFormat df = new DecimalFormat("#.####");
df.format(X); // output : '?'

Что может быть X возможно?

Ответы [ 3 ]

11 голосов
/ 07 апреля 2011

Это не вопросительный знак, это U+FFFD REPLACEMENT CHARACTER, который отображается как?поскольку он не может быть сопоставлен с выходной кодировкой:

NaN форматируется как строка, которая обычно имеет один символ \ uFFFD.Эта строка определяется объектом DecimalFormatSymbols.Это единственное значение, для которого префиксы и суффиксы не используются.

Точно так же?в представлении бесконечности есть символ U+221E INFINITY (∞).

Бесконечность форматируется как строка, которая обычно имеет один символ \ u221E, с примененными положительными или отрицательными префиксами и суффиксами.Строка бесконечности определяется объектом DecimalFormatSymbols.

См. Также:

5 голосов
/ 07 апреля 2011

Вернется "?"если X равно Float.NaN или Float.POSITIVE_INFINITY.Похоже, что Float.NEGATIVE_INFINITY возвращает "-?".

0 голосов
/ 04 ноября 2014

Я только что решил очень похожую проблему. В моем случае я пытался вернуть знак валюты в Spring и отобразить его в шаблоне Thymeleaf.

public String getAmountDue() {
    DecimalFormat decimalFormat = new DecimalFormat("¤0.00");
    decimalFormat.setCurrency(this.currency);
    String result = decimalFormat.format(amountDue);
    return result;
}

Таким образом, это фактически возвращало правильно отформатированную строку, но не в браузере, например. €99.99 Я получил ?99.99 - поэтому вместо знака валюты отображался знак вопроса.

В конце концов, это была проблема с моей конфигурацией Spring, которую я решил, добавив characterEncoding в свою конфигурацию:

<bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
  ...
  <property name="characterEncoding" value="UTF-8" />
</bean>
...