web-dev-qa-db-ja.com

std :: cout.precision()の正しい使用-末尾のゼロを出力しない

浮動小数点数の精度に関する質問がたくさんありますが、具体的にはなぜこのコードが必要なのか知りたいのですが

#include <iostream>
#include <stdlib.h>
int main()
{
  int a = 5;
  int b = 10;
  std::cout.precision(4);
  std::cout << (float)a/(float)b << "\n";
  return 0;
}

0.50.5000。元の整数データ型が原因ですか?

23
mahmood
#include <iostream>
#include <stdlib.h>
#include <iomanip>
int main()
{
  int a = 5;
  int b = 10;
  std::cout << std::fixed;
  std::cout << std::setprecision(4);
  std::cout << (float)a/(float)b << "\n";
  return 0;
}

末尾のゼロを表示するには、std::fixedマニピュレータをcoutに渡す必要があります。

26
Nemanja Boric

std::cout.precision(4);使用する最大桁数に最小値ではないことを伝えます。つまり、たとえば、

precision 4 on 1.23456 you get 1.235  
precision 5 on 1.23456 you get 1.2346

常にn桁を取得したい場合は、std::fixedを使用する必要があります。

4
stardust

動作は正しいです。引数は、使用する有効な最大桁数を指定します。最低でもありません。ゼロのみが続く場合、小数部の終わりのゼロは意味がないため、それらは出力されません。ゼロを印刷する場合は、適切なフラグを設定する必要があります。

std::cout.setf(std::ios::fixed, std::ios::floatfield);

これにより、表記が「固定」に設定され、すべての数字が出力されます。

1
Nikos C.