У меня проблема с отображением числа с плавающей точкой с точностью до 8 десятичных знаков. Я использую setprecision, но проблема в том, что, например, я хочу распечатать 1.61666666, а с setprecision - 1.61666667. Я не хочу округлять его, просто чтобы напечатать первые 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
здесь, если вы просто ищете константу.
stringstreams
может быть, это то, что вы видите? ideone.com/ENbkGm
setprecision