Pregunta

Quiero establecer el modo de redondeo a HALF_UP en mi DecimalFormat, pero Eclipse me está diciendo que setRoundingMode () no está disponible en la clase DecimalFormat. Mis propiedades del proyecto (y las propiedades generales de Eclipse) están usando el compilador 1.6. El sitio de developer.android.com dice que puedo utilizar cualquiera de Java 5 o 6 así que no estoy seguro de cuál es el problema.

import java.math.RoundingMode;
import java.text.DecimalFormat;

completedValueFormatter = NumberFormat.getNumberInstance(); DecimalFormat completedDecimalFormat = (DecimalFormat)completedValueFormatter; completedDecimalFormat.setRoundingMode(RoundingMode.HALF_UP);

También he intentado usar las herramientas de Android para generar un proyecto basado en la hormiga, trató este código en el proyecto y también consiguió el mismo error de compilación. Por lo tanto, no parece estar relacionada con Eclipse. Que parece estar relacionado con la API de Android.

¿Alguna sugerencia?

¿Fue útil?

Solución

Esto no significa realmente responder por qué no puedo utilizar el método de Java 6 .setRoundingMode (RoundingMode) en DecimalFormat, pero al menos es una solución alternativa.

int numDigitsToShow = this.completedValueFormatter.getMaximumFractionDigits();
BigDecimal bigDecimal = new BigDecimal(valueToBeRounded);
BigDecimal roundedBigDecimal = bigDecimal.setScale(numDigitsToShow, RoundingMode.HALF_UP);

return this.completedValueFormatter.format(roundedBigDecimal.doubleValue());

crear un BigDecimal con el I necesidad valor a ronda, cuando me siento un BigDecimal de ese valor con el conjunto de escala para el número de dígitos que necesito para redondear mis valores a. Luego paso que el valor redondeado fuera a mi NumberFormat original para la conversión de cadena.

Si alguien tiene una solución mejor, soy todo oídos!

Otros consejos

Esto es lo que sospecho que el problema es, (suponiendo que estoy leyendo la documentación adecuada) y es un doozy:

De acuerdo con la documentación de la API java.text.DecimalFormat, usted no está consiguiendo realmente el tiempo de ejecución de Java implimentation del 1,6 RE, pero está recibiendo un androide "versión mejorada" que claramente no incluye el setRoundingMode, que francamente picaduras.

"Esta es una versión mejorada de DecimalFormat que se basa en la versión estándar en la RI. Nueva o funcionalidad cambiado está etiquetado NUEVO."

Una debilidad en Java para muchos muchos muchos años ha sido la clase DecimalFormat programación predeterminada HALF_ROUND_UP y no había manera de cambiar eso, hasta JVM 1.6. Lástima ver Android es mantener esta necesidad de kludge vivo.

Así que parece que están atrapados ajustes de escala Kludging BigDecimal a la salida de formato de todo cualquier aplicación que lo necesite, en lugar de simplemente ser capaz de confiar en una llamada formateador solo para hacer el trabajo. No es el fin del mundo, pero muy decepcionante Google.

Por supuesto, ese mismo documento dice que setRondingMode () funciona, así que quizás esto es un todo ERROR cabo ??

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top