4

小数点以下6桁まで印刷したいので、以下を使用しました。

printf("%.6g",0.127943989);

の出力printfは0.127944ですが、これは正しいですが、これを試したところ、次のようになりました。

printf("%.6g",0.007943989);

出力は0.00794399になりましたが、これは私が期待していたものではありません。

printf小数点以下のゼロは無視しているようです。では、どうすれば最大6桁の精度で出力するように強制できますか?

4

2 に答える 2

5

"%f"フォーマット指定子は次のとおりです。

printf("%.6f\n",0.007943989)  // prints 0.007944

あなたが探しているものは?数字が許せば、これは自動的に%eフォーマットスタイルに切り替わらないことに注意してください。そのため、これもあなたが探しているものと正確に一致しない可能性があります。

たとえば、次のようになります。

printf("%.6g\n",0.00007943989);
printf("%.6f\n",0.00007943989);

プリント:

7.94399e-005
0.000079

そして、提供するより小さな数の指数形式が必要かどうかは明確ではありません"%g"

%fの仕様と%gは、精度仕様の処理方法が少し異なることに注意してください。

  • for %f:"小数点文字の後の桁数が精度仕様と等しい"
  • for %g:「有効桁数を指定する精度で」

また、小数点以下のゼロの実行は有効数字にカウントされません(これは、表示される動作を除外します%g)。

于 2012-05-20T07:41:26.757 に答える
1

ISO C規格では、

ピリオド('。')の後にオプションの10進数文字列が続く形式のオプションの精度...これにより、... gおよびG変換の有効数字の最大数が得られます。

GNU libc(GCC 4.5.1、libc 2.11; GCC 4.6.3、libc 2.15)で得られる出力は次のとおりです。

printf("%.6g\n", 0.12);
0.12
printf("%.6g\n", 0.1234567890);
0.123457
printf("%.6g\n", 0.001234567890);
0.00123457
printf("%#.6g\n", 0.001234567890);
0.00123457
printf("%.6g\n", 0.00001234567890);
1.23457e-05
printf("%#.6g\n", 0.00001234567890);
1.23457e-05

printf("%.6f\n", 0.12);
0.120000
printf("%.6f\n", 0.1234567890);
0.123457
printf("%.6f\n", 0.001234567890);
0.001235
printf("%#.6f\n", 0.001234567890);
0.001235
printf("%.6f\n", 0.001234567890);
0.000012
printf("%#.6f\n", 0.001234567890);
0.000012
于 2012-05-20T07:51:52.720 に答える