Как стереть / не показывать десятичные дроби после восьмого

0

У меня проблема с отображением числа с плавающей точкой с точностью до 8 десятичных знаков. Я использую setprecision, но проблема в том, что, например, я хочу распечатать 1.61666666, а с setprecision - 1.61666667. Я не хочу округлять его, просто чтобы напечатать первые 8 десятичных знаков.

cout.precision(8);
cout << fixed << 97.0/60.0 << endl;
printf("%.8f", 97.0 / 60.);

это код

  • 0
    setprecision
  • 0
    я использовал setprecision, но вместо 1.61666666 он показывает 1.61666667
Показать ещё 4 комментария
Теги:
precision

2 ответа

0
Лучший ответ

Ну, если вы должны (хотя я не понимаю, почему вы хотите "неправильный" номер)

#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);
}
  • 0
    prog.cpp: 18: ошибка: ISO C ++ запрещает объявление 'i' без типа
  • 1
    Это не моя проблема, если вы не можете включить функции C ++ 11. Поэтому, пожалуйста, прекратите выдавать какую-то бессмысленную ошибку, подразумевая, что код отстой, и лучше дать вам вескую причину, почему он не компилируется с вашей цепочкой инструментов. Также указывать номера строк довольно бессмысленно, если вы не используете точный код. Я отредактирую его, чтобы помочь вам устранить эту ошибку. Также обратите внимание, что мое решение довольно плохое, и вы должны объединить его с решением другого ответа, полностью сохранив цикл for
0

Вы всегда можете использовать stringstream:

string foo{static_cast<std::ostringstream&>(std::ostringstream() << setprecision(10) << 97.0 / 60.0).str()};
foo.resize(foo.size() - 1);

Кстати, вы можете подумать о том, чтобы использовать ratio здесь, если вы просто ищете константу.

  • 0
    ошибка: неполный тип не допускается
  • 0
    @ nel_3001 В старых версиях gcc была ошибка при перемещении / копировании stringstreams может быть, это то, что вы видите? ideone.com/ENbkGm

Ещё вопросы

Сообщество Overcoder
Наверх
Меню