Question

Je voudrais flotter comme le changement de cette façon:

10,5000 -> 10.5 10.0000 -> 10

Comment puis-je supprimer tous les zéros après la virgule, et le changer soit flottant (s'il y a des non-zéros) ou int (s'il n'y avait que des zéros)?

Merci d'avance.

Était-ce utile?

La solution

Pourquoi ne pas essayer regexp?

new Float(10.25000f).toString().replaceAll("\\.?0*$", "")

Autres conseils

Eh bien l'astuce est que flotteurs et eux-mêmes doubles n'ont pas vraiment les zéros de fin en soi; il est juste la façon dont ils sont imprimés (ou initialisés comme littéraux) qui pourraient leur montrer. Tenez compte de ces exemples:

Float.toString(10.5000); // => "10.5"
Float.toString(10.0000); // => "10.0"

Vous pouvez utiliser un DecimalFormat pour fixer l'exemple de " 10.0" :

new java.text.DecimalFormat("#").format(10.0); // => "10"

java.math.BigDecimal a une méthode stripTrailingZeros (), qui permettra d'atteindre ce que vous cherchez.

BigDecimal myDecimal = new BigDecimal(myValue);
myDecimal.stripTrailingZeros();
myValue = myDecimal.floatValue();

Ce manipule avec deux différentes formatteurs:

double d = 10.5F;
DecimalFormat formatter = new DecimalFormat("0");
DecimalFormat decimalFormatter = new DecimalFormat("0.0");
String s;
if (d % 1L > 0L) s = decimalFormatter.format(d);
else s = formatter.format(d);

System.out.println("s: " + s);

Format vos numéros pour votre sortie au besoin. Vous ne pouvez pas supprimer les valeurs « 0 » internes.

Vous avez juste besoin de classe comme format utilisé suivant:

new java.text.DecimalFormat("#.#").format(10.50000);
new java.text.DecimalFormat("#.#").format(10.00000);

Essayez d'utiliser System.out.format

Heres un lien qui permet la mise en forme de style c http://docs.oracle.com/javase/tutorial/java/data /numberformat.html

J'ai eu le même problème et trouver une solution de contournement dans le lien suivant: Stackoverflow - Comment bien formater des nombres flottants à chaîne sans 0 décimale inutile

La réponse de JASOND était celui que je suivais. Ce n'est pas locale dépendant qui était bon pour ma question et n'a eu aucun problème avec les valeurs longues.

Hope cette aide.

CONTENU DE L'AJOUT lien ci-dessus:

public static String fmt(double d) {
    if(d == (long) d)
        return String.format("%d",(long)d);
    else
        return String.format("%s",d);
    }

Produit:

232
0.18
1237875192
4.58
0
1.2345
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top