fmt.Printf の幅と精度の構文の不一致
浮動小数点値の幅と精度のフィールドを持つ fmt.Printf の使用法は次のとおりです。ドキュメントに矛盾があるため、混乱を招く可能性があります。ステートメント:
"浮動小数点値の場合、幅はフィールドの最小幅を設定し、精度は必要に応じて小数点以下の桁数を設定します。ただし、%g/%G の場合は合計が設定されます。桁数。"
文法的には正しいですが、「それ」は幅ではなく精度を指すため、あいまいさが生じます。これにより、予期しない書式設定動作が発生する可能性があります。
浮動小数点表記の精度
次の浮動小数点値を考慮してください。
123.45 12312.2 1.6069 0.6069 0.0006069
場合fmt.Printf("%.4g") を使用すると、出力は次のようになります。
123.5 1.231e+04 1.607 0.6069 0.0006069
精度フィールド (.4) が、小数点と指数を除いた合計桁数を指定していることに注目してください。したがって、最後の 2 つの値には先行ゼロがあっても、桁としてカウントされ、切り捨てられません。
幅の仕様
一方、幅フィールドは、 (例: g) は、小数点と指数を含むフィールドの最小幅を指定します。フォーマットされた値がこの幅を超える場合、切り捨てられません。ただし、先頭のゼロは、先頭のゼロが 4 つ以上になるまで幅にカウントされません。
例
この場合、フォーマット文字列 .9g は次のように指定します。最小幅は 10 で、先頭のゼロを除く合計桁数は 9 です。結果の書式設定は次のようになります。
0.0606060606060606: 9 digits, 12 width 0.3333333333333333: 9 digits, 11 width 0.05: 3 digits, 10 width (padded with spaces) 0.4: 2 digits, 10 width (padded with spaces) 0.1818181818181818: 9 digits (rounded), 11 width
これは、精度フィールドと幅フィールドの間の相互作用と、先頭のゼロが最終的な書式設定にどのように影響するかを示しています。
以上が浮動小数点値の幅と精度を使用する場合、fmt.Printf は先頭のゼロをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。