2011-04-07 45 views
5

我的DecimalFormat有时会返回'?'当试图format()。有没有可能会产生这种情况的输入?Java DecimalFormat返回一个“?”

例如:

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

什么能X可能是什么?

+0

什么是X,它是如何申报,如何界定? – 2011-04-07 16:11:24

+0

你能给我们一个简短但完整的例子来证明这个问题吗? – 2011-04-07 16:13:57

+1

我的问题应该说得更好了,但是希望回答一般性问题:“DecimalFormat会在什么情况下返回'?当格式()'ing – tinkertime 2011-04-07 16:19:47

回答

11

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

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

同样,?在无穷的表示中是一个U+221E INFINITY字符(∞)。

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

参见:

5

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

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>