%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 サイトの他の関連記事を参照してください。