Question

Je voudrais convertir double dans String. Je veux qu'il ait le moins de chiffres possible et au maximum 6.

Alors j'ai trouvé String.format("%.6f", d) qui convertit mon 100.0 dans 100.000000. Max Precision fonctionne correctement, mais j'aimerais qu'il soit converti en 100 (précision minimale). Avez-vous une idée de quelle méthode fonctionne comme ça?

Était-ce utile?

La solution

Utilisation DecimalFormat: new DecimalFormat("#.0#####").format(d).

Cela produira des nombres avec 1 à 6 chiffres décimaux.

Depuis DecimalFormat utilisera les symboles des paramètres par défaut, vous voudrez peut-être fournir les symboles à utiliser:

//Format using english symbols, e.g. 100.0 instead of 100,0
new DecimalFormat("#.0#####", DecimalFormatSymbols.getInstance( Locale.ENGLISH )).format(d)

Afin de formater 100,0 à 100, utilisez la chaîne de format #.######.

Notez que DecimalFormat se tourne par défaut, par exemple si vous passez 0.9999999 Vous obtiendrez la sortie 1. Si vous voulez obtenir 0.999999 Au lieu de cela, fournissez un mode d'arrondi différent:

DecimalFormat formatter = new DecimalFormat("#.######", DecimalFormatSymbols.getInstance( Locale.ENGLISH ));
formatter.setRoundingMode( RoundingMode.DOWN );
String s = formatter.format(d);

Autres conseils

Ceci est un hack bon marché qui fonctionne (et n'introduit aucun problème d'arrondi):

String string = String.format("%.6f", d).replaceAll("(\\.\\d+?)0*$", "$1");

String.format("%.0", d) ne vous donnera aucune décimale

-ou-

String.format("%d", (int)Math.round(f))

Ne pourriez-vous pas faire un setPrecision fonction, un peu comme ça

private static String setPrecision(double amt, int precision){
   return String.format("%." + precision + "f", amt);
}

alors bien sûr pour l'appeler

setPrecision(variable, 2); //

De toute évidence, vous pouvez le tweek pour l'arrondi ou quoi que vous ayez besoin.

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