Como usar “%f” para preencher um valor duplo em uma string com a precisão correta
-
09-06-2019 - |
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?
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.
Para uma referência mais completa, consulte o Wikipédia imprimir artigo, seção "espaços reservados para formato printf" e um bom exemplo na mesma página.
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);