浮動小数点数の精度に関する質問がたくさんありますが、具体的にはなぜこのコードが必要なのか知りたいのですが
#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
。元の整数データ型が原因ですか?
#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
に渡す必要があります。
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
を使用する必要があります。
動作は正しいです。引数は、使用する有効な最大桁数を指定します。最低でもありません。ゼロのみが続く場合、小数部の終わりのゼロは意味がないため、それらは出力されません。ゼロを印刷する場合は、適切なフラグを設定する必要があります。
std::cout.setf(std::ios::fixed, std::ios::floatfield);
これにより、表記が「固定」に設定され、すべての数字が出力されます。