thousands number example ejemplo java formatting decimalformat

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>