1

0.0、1.0、0.025 を出力するために使用できる単一のフォーマット文字列はどれですか? 例えば与えられた:

float vals[3] = { 0.0f, 1f, 0.025f };

for(int i=0; i < 3; i++)
    printf("%g\n", vals[i]);

望ましい出力:

0.0
1.0
0.025

代わりに次を取得します。

0
1
0.025

さまざまな幅指定子と %f と %g を試しましたが、必要なものが得られません。

C++ の代替手段があれば問題ありません。

4

3 に答える 3

3

setprecision(int n) を使用できます。n は出力する小数点以下の桁数です。固定表記を使用しない限り、末尾のゼロは表示されません

#include <iostream>
#include <iomanip>

float vals[3] = { 0.0f, 1.0f, 0.025f };
std::cout << setprecision(5);
for(int i=0; i < 3; i++)
std::cout << vals[i];

出力

0.0
1.0
0.025

以下を固定表記に変更

cout << setprecision(5) << fixed;

出力

0.00000
1.00000
0.02500

編集:科学表記法もあります。それが何をするかを理解できます。setprecision() ---> std::setprecision()

于 2012-05-09T01:34:15.577 に答える
2

浮動小数点数と倍精度浮動小数点数の小数点以下の精度を印刷時に指定できます。これは、%.Nf のようなフォーマット指定子で行われます。ここで、N は正の整数です。したがって、使用した場合:

printf("%.3f\n", vals[i]);

あなたの出力は次のとおりです。

0.000
1.000
0.025

ただし、宣言したとおりに印刷することはできません。ループのさまざまな段階で精度を変更する必要があります (最初の 2 回の反復では %.1f、最後の反復では %.3f)。printf には、先頭のスペースも含めて多くのオプションがあります。

http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html

編集:

したがって、コメントで説明したように、小数点以下 1 桁以上を出力したい場合は、その 1 つのケースに対して明示的なチェックを追加できます。

#include <math.h>
#include <stdio.h>

int 
main(int argc, char *argv[]) {
  float vals[3] = { 0.0f, 1.0f, 0.025f };

  for(int i=0; i < 3; i++) {
    if( fmod(vals[i],1) == 0) printf("%.1f\n", vals[i]);
    else printf("%f\n", vals[i]);
  }

  return 1;
}

出力:

0.0
1.0
0.025000
于 2012-05-09T01:34:41.730 に答える
1

* を使用して、精度が int 引数値から得られることを printf に伝えることができます。

printf("%.*f\n", (vals[i] == (int)vals[i]) ? 1 : 3 ,vals[i]);

印刷する必要があります:

0.0
1.0
0.025
于 2012-05-09T01:50:55.127 に答える