Подтвердить что ты не робот

Форматирование с плавающей запятой С++

Как вы форматируете float в С++ для вывода на два десятичных знака округлены? Мне не повезло с setw и setprecision, поскольку мой компилятор просто сообщает мне, что они not defined.

cout << "Total : " << setw(2) << total << endl;

итоговые выходы: Total : 12.3961

Мне бы хотелось: 12.40 или 12.39, если он слишком много работает, чтобы округлить.

4b9b3361

Ответ 1

Вам нужно включить <iomanip> и предоставить область пространства имен setw and setprecision

#include <iomanip>
std::setw(2)
std::setprecision(5)

попробовать:

cout.precision(5);
cout << "Total : " << setw(4)   << floor(total*100)/100 << endl;

или

 cout << "Total : " << setw(4)   << ceil(total*10)/10 << endl;

iostream обеспечивает функцию точности, но для использования setw вам может потребоваться включить дополнительный файл заголовка.

Ответ 2

Используйте cout << fixed или cout.setf(ios::fixed) и std::cout.precision(<# of decimal digits>), как описано ниже (с использованием компилятора Clang-503.0.40, включенного в OSX Mavericks):

#include <iostream>
using namespace std;  // Hopefully this doesn't offend purists :-)
                      // I just want to demonstrate usage with the
                      //    fewest keystrokes and the clearest format

int main()
{
   float loge = 2.718;
   double fake = 1234567.818;
   cout << fixed;
   cout.precision(2);
   cout << "loge(2) = " << loge << endl;
   cout << "fake(2) = " << fake << endl;
   cout.precision(3);
   cout << "loge(3) = " << loge << endl;
   cout << "fake(3) = " << fake << endl;
}

Выход из этого (обратите внимание на округление):

loge(2) = 2.72
fake(2) = 1234567.82
loge(3) = 2.718
fake(3) = 1234567.818

Это простая версия. Вместо использования cout << fixed; вы можете использовать cout.setf(ios::fixed); (для отображения научной нотации, заменить фиксированную на научную, и установить количество цифр справа от десятичной точки). Обратите внимание: cout.precision() также используется для установки количества цифр, отображаемых в общей сложности по обе стороны от десятичной точки, если флаги формата не включают фиксированные или научные. В Интернете есть учебные пособия в Интернете.

Ответ 3

Чтобы также включить конечный ноль, недостаточно установить точность. Вы также должны изменить формат с плавающей запятой в фиксированный формат, который использует количество цифр, указанное в setprecision как число цифр после десятичной точки:

std::cout << std::fixed << std::setprecision(2) << v;

Рабочий онлайн-код примера

Ответ 4

Если вы хотите округлить нулевой округ, вы можете использовать функцию C printf.

#include <iostream>
#include <cstdio>

int main() {
    float v = 12.3961;
    std::printf("%.2f",v); //prints 12.40
}

По сравнению с:

#include <iostream>
#include <iomanip>

int main() {
    float v = 12.3961;
    std::cout << std::setprecision(4) << v; //prints 12.4
}