ホームページ > バックエンド開発 > Golang > `%g` および幅/精度フィールドを含む `fmt.Printf` が予期せぬ動作をするのはなぜですか?

`%g` および幅/精度フィールドを含む `fmt.Printf` が予期せぬ動作をするのはなぜですか?

Susan Sarandon
リリース: 2024-10-26 17:02:02
オリジナル
360 人が閲覧しました

Why Does `fmt.Printf` with `%g` and Width/Precision Fields Behave Unexpectedly?

%g に幅と精度フィールドを含む fmt.Printf が予期せぬ動作をする

fmt.Printf を使用して浮動小数点を一貫した幅でフォーマットしようとすると() では、幅フィールドと精度フィールドの両方で %g 書式指定子を使用すると、期待どおりに動作しない可能性があります。

ドキュメントによると、%g の精度フィールドは、先頭を除く合計桁数を設定します。ゼロ。ただし、%g 形式指定子には、混乱を招く可能性のある独特の動作がいくつかあります。

先行ゼロと桁数カウント:

  • 小数部の先行ゼロは次のとおりです。桁としてカウントされません。
  • ゼロ以外の桁の後のゼロは桁としてカウントされます。

例:

  • fmt .Printf("%.4g", 0.12345) は 0.1235 を与えます。
  • fmt.Printf("%.4g", 0.012345) は 0.01235 を与えます。
  • fmt.Printf("%.4g" 、0.0012345) は 0.001234 を与えます。

精度と幅:

  • 幅フィールドは、小数点または指数を含む最小幅を指定します。
  • 桁数が指定された幅を超える場合、幅フィールドは無視されます。

あなたのケース:

この例では、 .9g を使用しました。これは、最小幅 10 と合計 9 桁を指定します。ただし、次の動作が発生します:

  • 0.0606060606060606: 12 桁が必要なので、最小幅は無視されます。
  • 0.3333333333333333: 11 桁が必要なので、最小幅は無視されます。
  • 0.05 および 0.4: 9 桁が必要ですが、最小幅より小さいため、スペースが埋め込まれます。
  • 0.1818181818181818: 四捨五入後の 9 桁が必要なため、最小幅は無視されます。

以上が`%g` および幅/精度フィールドを含む `fmt.Printf` が予期せぬ動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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