8

DecimalFormat有时会返回一个“?” 尝试时format()。是否有可以创建此场景的输入?

例如:

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

可能X是什么?

4

4 回答 4

13

不是问号,U+FFFD REPLACEMENT CHARACTER是 ,显示为 ? 因为它不能映射到输出编码:

NaN 被格式化为字符串,通常只有一个字符 \uFFFD。此字符串由 DecimalFormatSymbols 对象确定。这是唯一不使用前缀和后缀的值。

相似地, ?在无穷大的表示中是一个U+221E INFINITY字符(∞)。

Infinity 被格式化为一个字符串,它通常具有单个字符 \u221E,并应用了正数或负数前缀和后缀。无穷大字符串由 DecimalFormatSymbols 对象确定。

也可以看看:

于 2011-04-07T16:20:33.847 回答
5

它会返回“?” 如果XFloat.NaNFloat.POSITIVE_INFINITY。似乎Float.NEGATIVE_INFINITY返回“-?”。

于 2011-04-07T16:03:13.720 回答
0

我刚刚解决了非常相似的问题。就我而言,我试图将货币符号返回给 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>
于 2014-11-04T14:47:50.170 回答
0

你必须在这里定义本地实例..就像我得到 Locale.ENGLISH

双数=20.2563;

    NumberFormat nf = NumberFormat.getNumberInstance(Locale.ENGLISH);
    DecimalFormat df = (DecimalFormat)nf;
    df.applyPattern("##.00");

    String output = df.format(no);
于 2020-05-20T11:13:36.283 回答