28

浮動小数点数の精度について多くの質問がありますが、具体的には、このコードの理由を知りたいです

#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.5ますか?私は見ることを期待しています0.5000。元の整数データ型が原因ですか?

4

3 に答える 3

33
#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

于 2013-06-27T11:27:50.780 に答える
4

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

于 2013-06-27T11:32:36.510 に答える
2

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

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

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

于 2013-06-27T11:32:33.330 に答える