ホームページ >バックエンド開発 >Golang >精度フィールドは実際に `fmt.Printf` の `%g` でどのように機能しますか?

精度フィールドは実際に `fmt.Printf` の `%g` でどのように機能しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 01:27:02368ブラウズ

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

%g の幅フィールドと精度フィールドを持つ fmt.Printf の予期しない動作

曖昧なドキュメントについて

fmt.Printf の書式設定フィールドのドキュメント浮動小数点値の場合、

「浮動小数点値の場合、幅はフィールドの最小幅を設定します
、精度は、
適切な場合、小数点以下の桁数を設定します。ただし、 %g/%G の場合、合計桁数が設定されます。

混乱を招く部分は、最後の文の "it" の使用法にあります。これは実際には「幅」ではなく「精度」を指します。

%.9g の実際の動作

%.9g は合計 9 桁の有効数字を生成するはずであるという直感に反して、実際には小数点以下の数字のみが考慮されます。

たとえば、%.9g は先行ゼロを効果的に切り捨てるため、123456.789 は 123.4e 03 としてフォーマットされます。

逆に、0.0000012345 は 1.2345 としてフォーマットされます。 e-06 %.9g は小数点以下のすべての有効数字を考慮するためです。

幅と精度の影響

幅フィールドは、小数点を含む書式設定された文字列全体の最小幅を指定します。点と指数 (存在する場合)。

精度フィールドは、上で説明したように、小数点以下の有効桁数を設定します。

%g の場合、精度フィールドは幅フィールドをオーバーライドします。 。ただし、書式設定された文字列が指定された幅を超える場合は、指定された幅を超えて拡張されます。

指定された例の説明

この例では、次の浮動小数点値を次を使用して書式設定する必要があることを思い出してください。 .9g:

  • 0.0606060606060606
  • 0.3333333333333333
  • 0.05
  • 0.4
  • 0.181818 1818181818
  • 0.0606060606060606:精度 9 では先頭のゼロが切り捨てられ、結果は 0.0606060606 となり、幅 10 内に収まります。
  • 0.3333333333333333: 最初の例と同様、結果の文字列 0.333333333 は幅 10 内に収まります。
  • 0.05: 有効数字が 2 桁のみの場合、0.05 は最小幅 10 を満たすようにスペースが埋め込まれます。
  • 0.4: 0.05 と同様に、0.4 も最小幅 10 を満たすように埋め込まれます。
  • 0.1818181818181818: 9 の精度は、末尾の 2 が切り上げられて 0.181818182 になります。この文字列は幅 10 以内に収まります。

以上が精度フィールドは実際に `fmt.Printf` の `%g` でどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。