2011-04-07 15 views
5

Mi DecimalFormat a veces devuelve un '?' al intentar format(). ¿Hay alguna entrada que cree este escenario?Java DecimalFormat devuelve un "?"

Por ejemplo:

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

¿Qué podría X ser?

+0

Lo que se X, ¿cómo se declara, y cómo se define? –

+0

¿Podría darnos un ejemplo breve pero completo que demuestre el problema? –

+1

Mi pregunta debería haber sido mejor redactada, pero estaba buscando responder a la pregunta genérica "¿En qué casos un Formulario Decimal devolverá un '?' cuando formato() 'ing – tinkertime

Respuesta

11

No es un signo de interrogación, es un U+FFFD REPLACEMENT CHARACTER, que se muestra como? dado que no se puede asignar a la codificación de salida:

NaN se formatea como una cadena, que normalmente tiene un solo carácter \ uFFFD. Esta cadena está determinada por el objeto DecimalFormatSymbols. Este es el único valor para el que los prefijos y sufijos no se utilizan.

De forma similar, ¿? en representación de infinito es un carácter U+221E INFINITY (∞).

Infinity tiene el formato de una cadena, que normalmente tiene un solo carácter \ u221E, con los prefijos y sufijos positivos o negativos aplicados. La cadena de infinito está determinada por el objeto DecimalFormatSymbols.

Consulte también:

5

¿Volverá "?" si X es Float.NaN o Float.POSITIVE_INFINITY. Parece que Float.NEGATIVE_INFINITY devuelve "-?".

0

yo acabamos de resolver un problema muy similar. En mi caso, estaba tratando de devolver el signo de moneda a Spring y mostrarlo en la plantilla de Thymeleaf.

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

Así que esto realmente devolvía la cadena correctamente formateada pero en el navegador en lugar de, p. €99.99 Obtenía ?99.99 - por lo que en lugar del signo de moneda se mostró un signo de interrogación.

Al final, que era un problema con mi configuración de la primavera, que resuelve añadiendo characterEncoding a mi configuración:

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