如何在 8.th 小数之后擦除/不显示浮点小数



我在显示正好 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