Domanda

Vorrei convertire double in String. Voglio che abbia il minor numero di cifre possibile e al massimo 6.

Quindi ho trovato String.format("%.6f", d) che converte il mio 100.0 in 100.000000. Max Precision funziona correttamente, ma vorrei che venisse convertito 100 (Precisione minima). Hai idea di quale metodo funziona in quel modo?

È stato utile?

Soluzione

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

Ciò produrrà numeri con 1 a 6 cifre decimali.

Da DecimalFormat Userai i simboli della locale predefinita, potresti voler fornire quali simboli usare:

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

Per formattare da 100,0 a 100, utilizzare la stringa di formato #.######.

Notare che DecimalFormat rotonderà per impostazione predefinita, ad esempio se si passa 0.9999999 otterrai l'output 1. Se vuoi ottenere 0.999999 Invece, fornire una modalità di arrotondamento diversa:

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

Altri suggerimenti

Questo è un hack economico che funziona (e non introduce alcun problema di arrotondamento):

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

String.format("%.0", d) Non ti darà luoghi decimali

-o-

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

Non potresti semplicemente fare un setPrecision funzione, un po 'come questa

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

Allora ovviamente per chiamarlo

setPrecision(variable, 2); //

Ovviamente puoi tweeklo per arrotondare o qualunque cosa tu debba fare.

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