Pregunta

Me gustaría convertir double dentro String. Quiero que tenga la menor cantidad de dígitos posible y al máximo 6.

Entonces encontré String.format("%.6f", d) que convierte mi 100.0 dentro 100.000000. Max Precision funciona correctamente, pero me gustaría que se convierta en 100 (Precisión mínima). ¿Tienes alguna idea de qué método funciona así?

¿Fue útil?

Solución

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

Esto producirá números con 1 a 6 dígitos decimales.

Ya que DecimalFormat Utilizará los símbolos de la configuración regional predeterminada, es posible que desee proporcionar qué símbolos usar:

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

Para formatear 100.0 a 100, use la cadena de formato #.######.

Tenga en cuenta que DecimalFormat redondeará de forma predeterminada, por ejemplo, si pasa 0.9999999 Obtendrá la salida 1. Si quieres conseguir 0.999999 En su lugar, proporcione un modo de redondeo diferente:

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

Otros consejos

Este es un truco barato que funciona (y no introduce ningún problema de redondeo):

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

String.format("%.0", d) no te dará lugares decimales

-o-

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

¿No podrías hacer un setPrecision función, algo así

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

Entonces, por supuesto, para llamarlo

setPrecision(variable, 2); //

Obviamente, puede hacerlo para redondear o lo que sea que necesite hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top