example - number format java
Java DecimalFormat devuelve un "?" (3)
Mi DecimalFormat
veces devuelve un ''?'' cuando intenta format()
. ¿Hay alguna entrada que cree este escenario?
Por ejemplo:
DecimalFormat df = new DecimalFormat("#.####");
df.format(X); // output : ''?''
¿Qué podría ser posiblemente X
?
No es un signo de interrogación, es un U+FFFD REPLACEMENT CHARACTER
, que se muestra como? ya que no se puede mapear a la codificación de salida:
NaN está formateado como una cadena, que generalmente 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.
Similar, ? en representación del infinito es un carácter U+221E INFINITY
(∞).
Infinity se formatea como 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.
Ver también:
Volverá "?" si X
es Float.NaN
o Float.POSITIVE_INFINITY
. Parece que Float.NEGATIVE_INFINITY
devuelve "-?".
Acabo 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, por ejemplo, €99.99
, estaba obteniendo ?99.99
- así que en lugar del signo de moneda había un signo de interrogación.
Al final, ese fue un problema con mi configuración Spring, que resolví agregando characterEncoding
a mi configuración:
<bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
...
<property name="characterEncoding" value="UTF-8" />
</bean>