Domanda

Voglio impostare la modalità di arrotondamento per HALF_UP sul mio DecimalFormat, ma eclissi mi sta dicendo che setRoundingMode () non è disponibile sulla classe DecimalFormat. Le mie proprietà del progetto (e le proprietà complessive Eclipse) stanno usando il compilatore 1.6. Il sito developer.android.com dice che posso utilizzare Java 5 o 6, quindi non sono sicuro di quale sia il problema.

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

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

Ho provato anche utilizzando gli strumenti Android per generare un progetto di formica-based, ha provato questo codice nel progetto e anche ottenuto lo stesso errore di compilazione. Così non sembra essere correlato a Eclipse. Sembra legato alla API di Android.

Qualche suggerimento?

È stato utile?

Soluzione

Questo non significa veramente rispondere perché non posso utilizzare il metodo Java 6 .setRoundingMode (RoundingMode) in DecimalFormat, ma è almeno un work-around.

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

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

I creare un BigDecimal con l'ho bisogno del valore di turno, poi ho un BigDecimal di tale valore con il set scala per il numero di cifre che ho bisogno di arrotondare i miei valori a. Poi passo che valore arrotondato fuori alla mia NumberFormat originale per la conversione in stringa.

Se qualcuno ha una soluzione migliore, io sono tutto orecchie!

Altri suggerimenti

Ecco quello che ho il sospetto che il problema è, (supponendo sto leggendo la documentazione correttamente) e la sua una cosa ancora più bizzarra:

In base alla documentazione java.text.DecimalFormat API, si sta in realtà non ottenendo il runtime implimentation del Java 1.6 RE, ma stanno ottenendo un androide "versione migliorata", che chiaramente non include il setRoundingMode, che francamente morsi.

"Si tratta di una versione migliorata del DecimalFormat che si basa sulla versione standard del RI. Nuovo o modificata la funzionalità è etichettato di nuovo".

Una debolezza in Java per molti molti molti anni è stata la classe DecimalFormat default per HALF_ROUND_UP e non aveva modo di cambiare la situazione, fino JVM 1.6. Peccato per vedere Android è mantenere questo bisogno di kludge vivi.

Quindi, sembra che siamo bloccati Impostazioni scala Kludging BigDecimal per l'output in formato tutto qualsiasi applicazione che ne ha bisogno, invece di essere in grado di contare su una chiamata di formattazione da solo per ottenere il lavoro fatto. Non è la fine del mondo, ma molto deludente Google.

Naturalmente questo stesso documento dice che setRondingMode () funziona, quindi forse questo è un tutti fuori BUG ??

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top