"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como o campo de precisão realmente funciona com `%g` em `fmt.Printf`?

Como o campo de precisão realmente funciona com `%g` em `fmt.Printf`?

Publicado em 2024-11-08
Navegar:786

How Does the Precision Field Actually Work with `%g` in `fmt.Printf`?

Comportamento inesperado de fmt.Printf com campos de largura e precisão para %g

Compreendendo a documentação ambígua

A documentação para os campos de formatação de fmt.Printf para valores de ponto flutuante afirma que:

"Para valores de ponto flutuante, largura define a largura mínima do campo
e precisão define o número de casas após o decimal, se
apropriado, exceto que para %g/%G ele define o número total de dígitos."

A parte confusa está no uso de "it" na última frase. Na verdade, refere-se a "precisão", não a "largura".

O verdadeiro comportamento de %.9g

Ao contrário da intuição de que %.9g deveria produzir um total de 9 dígitos significativos, ele na verdade, considera apenas dígitos após o ponto decimal.

Por exemplo, 123456.789 será formatado como 123.4e 03 porque %.9g trunca efetivamente quaisquer zeros à esquerda.

Por outro lado, 0.0000012345 será formatado como 1.2345 e-06 porque %.9g considera todos os dígitos significativos após o ponto decimal.

O impacto da largura e da precisão

O campo de largura especifica a largura mínima de toda a string formatada, incluindo o decimal ponto e expoente (se houver).

O campo de precisão, conforme descrito acima, define o número de dígitos significativos após o ponto decimal.

Para %g, o campo de precisão substitui o campo de largura . No entanto, se a string formatada exceder a largura especificada, ela se estenderá além da largura especificada.

Explicação do exemplo fornecido

Lembre-se de que o exemplo envolve a formatação dos seguintes valores de ponto flutuante usando 0,9g:

  • 0,0606060606060606
  • 0,3333333333333333
  • 0,05
  • 0,4
  • 0,1818181818181818
  • 0,0606060606060606: O a precisão de 9 trunca os zeros iniciais, resultando em 0,0606060606, que cabe na largura de 10.
  • 0,3333333333333333: semelhante ao primeiro exemplo, a string resultante 0,333333333 cabe na largura de 10.
  • 0,05: Com apenas 2 dígitos significativos, 0,05 é preenchido com espaços para atender à largura mínima de 10.
  • 0,4: semelhante a 0,05, 0,4 também é preenchido para atender à largura mínima de 10.
  • 0,1818181818181818: A precisão de 9 resulta em 0,181818182 com o 2 final sendo arredondado para cima. Esta string cabe na largura de 10.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3