Pergunta

Estou tentando preencher uma string com um valor duplo usando um sprintf assim:

sprintf(S, "%f", val);

Mas a precisão está sendo reduzida a seis casas decimais.Preciso de cerca de 10 casas decimais para a precisão.

Como isso pode ser alcançado?

Foi útil?

Solução

%[largura].[precisão]

A largura deve incluir o ponto decimal.

%8,2 significa 8 caracteres de largura;5 dígitos antes do ponto e 2 depois.Um caractere é reservado para o ponto.

5 + 1 + 2 = 8

Outras dicas

O que você quer é um modificador:

sprintf(S, "%.10f", val);

man sprintf terá muito mais detalhes sobre especificadores de formato.

Tome cuidado - a saída do sprintf irá variar de acordo com a localidade C.Isso pode ou não ser o que você deseja.Consulte LC_NUMERIC nos documentos/páginas de manual do local.

%f é para valores flutuantes.

Tente usar %lf em vez de.Ele é projetado para duplas (que costumavam ser chamadas de carros alegóricos longos).

duplo x = 3,14159265;
printf("15.10lf ",x);

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