Question

Je veux régler le mode Arrondi à HALF_UP sur mon DecimalFormat, mais éclipse me dit que setRoundingMode () ne sont pas disponibles sur la classe Decimal. Mes propriétés du projet (et les propriétés globales Eclipse) utilisent le compilateur 1.6. Le site developer.android.com dit que je peux utiliser soit Java 5 ou 6 donc je ne suis pas sûr de ce que le problème est.

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

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

J'ai aussi essayé d'utiliser les outils Android pour générer un projet basé ant, a essayé ce code dans le projet et a également obtenu la même erreur de compilation. Donc, il ne semble pas être lié à Eclipse. Il semble lié à l'API Android.

Toutes les suggestions?

Était-ce utile?

La solution

Cela ne veut pas vraiment répondre à pourquoi je ne peux pas utiliser la méthode Java 6 .setRoundingMode (RoundingMode) dans DecimalFormat, mais il est au moins un travail autour.

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

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

Je crée un BigDecimal avec la valeur que je besoin de tour, puis-je obtenir un BigDecimal de cette valeur avec l'ensemble de l'échelle au nombre de chiffres que je dois arrondir mes valeurs. Ensuite, je passe cette valeur arrondie au large à mon NumberFormat d'origine pour la conversion en chaîne.

Si quelqu'un a une meilleure solution, je suis toutes les oreilles!

Autres conseils

Voici ce que je soupçonne que le problème est, (en supposant que je suis en train de lire la documentation correctement) et son un doozy:

D'après la documentation de l'API java.text.DecimalFormat, vous n'êtes pas réellement obtenir le Runtime Java implimentation des RE 1.6, mais obtenez un androïde « version améliorée » qui ne comprend pas clairement le setRoundingMode, qui franchement morsures.

« Ceci est une version améliorée de Decimal qui est basé sur la version standard du RI. Nouveau ou modification de la fonctionnalité est étiquetée NOUVEAU. »

Une faiblesse en Java pour beaucoup de nombreuses années a été la classe Decimal à HALF_ROUND_UP et en défaut avait aucun moyen de changer cela, jusqu'à ce que la JVM 1.6. Pitié pour voir Android est de garder ce besoin de kludge vivant.

Il semble que nous sommes coincés les paramètres d'échelle Kludging BigDecimal à la sortie de format tout sur toute application qui en a besoin, au lieu de simplement pouvoir compter sur un appel formatter seul pour faire le travail. Pas la fin du monde, mais très décevant Google.

Bien sûr, ce même document dit que setRondingMode () fonctionne, donc peut-être cela est un tout en BUG ??

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top