Pergunta

Enquanto estou usando %g como especificador de formato em printf(), às vezes, arredonda até 2 lugares após o ponto decimal, às vezes até 3 lugares, algumas vezes até 4 lugares ... como isso acontece?

Na verdade, onde devemos usar %g ao invés de %f ou %e Para números de ponto flutuante?

Foi útil?

Solução

o %g especificador de formato faz seu arredondamento como %f faria, mas se %f resultaria em 4.234000, então %g irá omitir os zeros à direita e imprimir 4.234.

%g deve ser usado quando fizer mais sentido em seu formato de saída, alguns números são impressos como 12345.6, enquanto um número um pouco maior seria impresso como 1.235e04.

Outras dicas

%g 'desliza automaticamente entre o uso %e e %f Dependendo do valor, na tentativa de exibir o máximo de informações possível, da mesma maneira que as calculadoras de mão. Também com %g Os zeros e o ponto decimal à direita não estão incluídos.

Para o %f Conversão, a "precisão" é o número de dígitos Depois do ponto decimal, enquanto para %g é o número de significativo dígitos.
A precisão padrão é 6 nos dois casos.

De Manual Printf:

"O argumento duplo é convertido em estilo para e (ou f ou e para conversões g). A precisão especifica o número de dígitos significativos. Se a precisão estiver ausente, 6 dígitos serão fornecidos; se a precisão for zero, ela for tratada como 1. O estilo E é usado se o expoente de sua conversão for menor que -4 ou maior ou igual à precisão. Os zeros à direita forem removidos da parte fracionária do resultado; um ponto decimal aparece apenas se for seguido por AT em AT pelo menos um dígito. "

Não pretendo "RTFM", mas você provavelmente encontrará o que está procurando nas seções manuais sobre o controle de precisão e comprimento.

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