Форматирование с плавающей запятой С++
Как вы форматируете float в С++ для вывода на два десятичных знака округлены? Мне не повезло с setw
и setprecision
, поскольку мой компилятор просто сообщает мне, что они not defined
.
cout << "Total : " << setw(2) << total << endl;
итоговые выходы: Total : 12.3961
Мне бы хотелось: 12.40
или 12.39
, если он слишком много работает, чтобы округлить.
Ответы
Ответ 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
}