Pergunta

Eu gostaria de variar a precisão de uma representação dupla em uma string que estou formatando com base na entrada do usuário. Agora estou tentando algo como:

String foo = String.format("%.*f\n", precision, my_double);

No entanto, eu recebo um java.util.UnknownFormatConversionException. Minha inspiração para essa abordagem foi c printf e este recurso (Seção 1.3.1).

Tenho um erro simples de sintaxe em algum lugar, o Java suporta esse caso ou existe uma abordagem melhor?

Editar:

Suponho que poderia fazer algo como:

String foo = String.format("%." + precision + "f\n", my_double);

Mas eu ainda estaria interessado em suporte nativo para essa operação.

Foi útil?

Solução

Você meio que respondeu sua própria pergunta - Crie sua string de formato dinamicamente ... Strings de formato válidos seguem as convenções descritas aqui: http://java.sun.com/j2se/1.5.0/docs/api/java/util/formatter.html#syntax.

Se você deseja um decimal formatado que ocupa 8 caracteres totais (incluindo o ponto decimal) e você queria 4 dígitos após o ponto decimal, sua sequência de formato deve parecer "%8.4f" ...

Que eu saiba, não há "suporte nativo" em Java além das cordas de formato sendo flexíveis.

Outras dicas

Você pode usar o Decimalformat classe.

double d1 = 3.14159;
double d2 = 1.235;

DecimalFormat df = new DecimalFormat("#.##");

double roundedD1 = df.format(d); // 3.14
double roundedD2 = df.format(d); // 1.24

Se você deseja definir a precisão no tempo de execução, ligue:

df.setMaximumFractionDigits(precision)

Por que não :

String form = "%."+precision+"f\n";
String foo = String.format(form, my_double);

ou :

public static String myFormat(String src, int precision, Object args...)
{
    String form = "%."+precision+"f\n";
    return String.format(form, args);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top