Frage

Ich möchte konvertieren double hinein String. Ich möchte, dass es so wenige Ziffern wie möglich und maximal 6 hat.

Also fand ich String.format("%.6f", d) das konvertiert meine 100.0 hinein 100.000000. Maximale Präzision funktioniert korrekt, aber ich möchte, dass es konvertiert wird 100 (Minimale Präzision). Haben Sie eine Idee, welche Methode so funktioniert?

War es hilfreich?

Lösung

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

Dies erzeugt Zahlen mit 1 bis 6 Dezimalstellen.

Seit DecimalFormat Verwendet die Symbole des Standardgebiets. Möglicherweise möchten Sie angeben, welche Symbole verwendet werden sollen:

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

Um 100.0 bis 100 zu formatieren, verwenden Sie die Formatzeichenfolge #.######.

Beachten Sie, dass DecimalFormat wird standardmäßig rund, z. B. wenn Sie eingeben 0.9999999 Sie erhalten die Ausgabe 1. Wenn Sie bekommen wollen 0.999999 Geben Sie stattdessen einen anderen Rundungsmodus an:

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

Andere Tipps

Dies ist ein billiger Hack, der funktioniert (und keine Rundungsprobleme einführt):

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

String.format("%.0", d) Ich werde Ihnen keine Dezimalstellen geben

-oder-

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

Könntest du nicht einfach eine machen setPrecision Funktion, so etwas

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

Dann nenne es natürlich, es zu nennen

setPrecision(variable, 2); //

Offensichtlich können Sie es zum Runding oder was auch immer Sie tun müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top