ホームページ > バックエンド開発 > Golang > fmt.Printf の %g 形式指定子の幅と精度はどのように連携しますか?

fmt.Printf の %g 形式指定子の幅と精度はどのように連携しますか?

Mary-Kate Olsen
リリース: 2024-10-26 12:23:29
オリジナル
324 人が閲覧しました

How does precision work with width in fmt.Printf's %g format specifier?

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 を意味します。 、小数点と指数を含みます。それぞれの値を個別に調べてみましょう:

  • 0.0606060606060606: 先行ゼロのない 9 桁は 0.0606060606 で、これはすでに 12 文字幅であり、最小幅の 10 を超えています。
  • 0.3333333333333333:以前の値、先行ゼロのない 9 桁は 0.333333333 で、11 文字幅で、最小幅の 10 を超えています。
  • 0.05: 先行ゼロのない 9 桁は 0.05 で、最小幅の 10 未満です。最小幅を満たすために 6 個のスペースが埋め込まれます。
  • 0.4: 前の値と同様に、先行ゼロのない 9 桁は 0.4 で、最小幅の 10 よりも小さくなります。最小幅を満たすために 6 つのスペース。
  • 0.1818181818181818: 先頭のゼロのない 9 桁は 0.181818182 になります。これは四捨五入によるものです。 11 文字で最小幅の 10 を超えています。

これにより、観察された予期しない幅が説明されています。

以上がfmt.Printf の %g 形式指定子の幅と精度はどのように連携しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート