Pergunta

Eu gostaria de converter double em String. Eu quero que ele tenha o mínimo de dígitos possível e no máximo 6.

Então eu encontrei String.format("%.6f", d) que converte meu 100.0 em 100.000000. Max Precision funciona corretamente, mas eu gostaria que fosse convertido para 100 (precisão mínima). Você tem alguma ideia de qual método está funcionando assim?

Foi útil?

Solução

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

Isso produzirá números com 1 a 6 dígitos decimais.

Desde DecimalFormat Usará os símbolos da localidade padrão, você pode fornecer quais 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 formatar 100.0 a 100, use a string de formato #.######.

Observe que DecimalFormat irá de volta por padrão, por exemplo, se você passar 0.9999999 você vai obter a saída 1. Se você quiser conseguir 0.999999 Em vez disso, forneça um modo de arredondamento diferente:

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

Outras dicas

Este é um hack barato que funciona (e não apresenta nenhum problema de arredondamento):

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

String.format("%.0", d) vai lhe dar lugares decimais

-ou-

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

Você não poderia apenas fazer um setPrecision função, meio que assim

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

Então é claro que chamá -lo

setPrecision(variable, 2); //

Obviamente, você pode tweeking para arredondar ou o que for necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top