fmt.Printf は %g の幅と精度のフィールドをどのように操作しますか?
% の幅と精度のフィールドを使用した fmt.Printf の動作g は混乱を招く可能性があります。それを理解するには、ドキュメントを明確にする必要があります。
ドキュメント内の次のステートメントは特に重要です:
precision sets the number of places after the decimal, if appropriate, except that for %g/%G it sets the total number of digits.
このステートメントでは、「それ」は幅ではなく精度を指します。これは、幅が最小フィールド幅を指定するのに対し、精度は先頭のゼロを除いて表示される合計桁数を指定することを意味します。
たとえば、fmt.Printf("%.4g") を使用して 123.45 をフォーマットすると、結果は123.5です。これは、精度が 4 に設定されており、123.5 が 4 桁 (小数点を除く) であるためです。
ただし、先頭にゼロがある場合、動作はより複雑になります。先頭のゼロは桁としてカウントされず、その数が 4 つ未満の場合でも削除されません。たとえば、fmt.Printf("%.4g") を使用して 0.00012345 をフォーマットすると、結果は 0.0001234 になります。これは、精度が 4 に設定されており、0.0001234 が 4 桁 (小数点と先頭のゼロを除く) であるためです。
精度がどのように動作するかを理解したので、幅フィールドを調べることができます。幅は、小数点と指数を含むフィールドの最小幅を指定します。書式設定された値の桁数が指定された幅より多い場合、幅を超えて拡張されます。ただし、精度が優先されるため、値は最初に精度要件を満たす必要があります。
この例では、.9g を指定します。これは、合計 9 桁 (先頭のゼロを除く) と最小幅 10 を意味します。 、小数点と指数を含みます。それぞれの値を個別に調べてみましょう:
これにより、観察された予期しない幅が説明されています。
以上がfmt.Printf の %g 形式指定子の幅と精度はどのように連携しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。