我在显示正好 8 位小数的浮点数时遇到问题。我使用设置精度,但问题是例如我想打印 1.616666666,并且设置精度显示 1.616666667。我不想四舍五入,只是打印前 8 位小数。
cout.precision(8);
cout << fixed << 97.0/60.0 << endl;
printf("%.8f", 97.0 / 60.);
这是代码
好吧,如果你必须(虽然我不明白你为什么想要"错误"的数字)
#include <iomanip>
#include <iostream>
#include <sstream>
using namespace std;
void concat_print(double val, int precision)
{
stringstream stream;
stream << setprecision(precision + 1) << val;
// for (auto i = 0; i < stream.str().size() - 1; ++i) <- C++11 only
for (size_t i = 0; i < stream.str().size() - 1; ++i)
cout << stream.str()[i];
}
int main()
{
// double number { 1.616666666666 };
double number = 1.616666666666;
cout << "With normal setprecision: " << setprecision(8)
<< number << 'n';
cout << "With ugly hack: ";
concat_print(number, 8);
}
你总是可以使用stringstream
愚蠢
string foo{static_cast<std::ostringstream&>(std::ostringstream() << setprecision(10) << 97.0 / 60.0).str()};
foo.resize(foo.size() - 1);
顺便说一下,如果您只是在寻找某种常量,您可以考虑在此处使用 ratio
。