「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 精度フィールドは実際に `fmt.Printf` の `%g` でどのように機能しますか?

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

2024 年 11 月 8 日に公開
ブラウズ:204

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

%g の幅および精度フィールドによる fmt.Printf の予期しない動作

あいまいなドキュメントについて

fmt.Printf の書式設定フィールドのドキュメント浮動小数点値の場合は次のようになります:

"浮動小数点値の場合、幅フィールドの最小幅を設定します

適切な場合、精度は小数点以下の桁数を設定します。ただし、%g/%Gの場合は合計桁数が設定されます。"

わかりにくいのは、最後の文の「it」の使い方です。これは実際には「幅」ではなく「精度」を指します。

%.9g の実際の動作

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

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

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

幅と精度の影響

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

上記のとおり、精度フィールドは、小数点の後の有効桁数を設定します。

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

指定された例の説明

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

  • 0.0606060606060606
  • 0.3333333333333333
  • 0.05
  • 0.4
  • 0.1818181818181818
  • 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 件中、結果は 0.181818182 となり、末尾の 2 は次のようになります。丸められた。この文字列は 10.
  • の幅内に収まります。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3