2011-04-07 44 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>