Печать правильного количества десятичных знаков cout - PullRequest
99 голосов
/ 06 мая 2011

У меня есть список float значений, и я хочу напечатать их с cout с двумя десятичными знаками.

Например:

10.900  should be printed as 10.90
1.000 should be printed as 1.00
122.345 should be printed as 122.34

Как я могу это сделать?

(setprecision, похоже, не помогает в этом.)

Ответы [ 11 ]

148 голосов
/ 06 мая 2011

С <iomanip> вы можете использовать std::fixed и std::setprecision

Вот пример

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;

    std::cout << std::fixed;
    std::cout << std::setprecision(2);
    std::cout << d;
}

И вы получите вывод

122.34
35 голосов
/ 06 мая 2011

Вы были почти у цели, нужно также использовать std :: fixed, см. http://www.cplusplus.com/reference/iostream/manipulators/fixed/

#include <iostream>
#include <iomanip>

int main(int argc, char** argv)
{
    float testme[] = { 0.12345, 1.2345, 12.345, 123.45, 1234.5, 12345 };

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

    for(int i = 0; i < 6; ++i)
    {
        std::cout << testme[i] << std::endl;
    }

    return 0;
}

вывод:

0.12
1.23
12.35
123.45
1234.50
12345.00
15 голосов
/ 06 мая 2011

setprecision(n) относится ко всему числу, а не к дробной части. Вам нужно использовать формат с фиксированной запятой, чтобы применить его к дробной части: setiosflags(ios::fixed)

7 голосов
/ 02 июня 2015

Упростите принятый ответ

Упрощенный пример:

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;
    std::cout << std::fixed << std::setprecision(2) << d;
}

И вы получите вывод

122.34

Справка:

5 голосов
/ 02 сентября 2017

У меня была проблема с целыми числами при желании согласованного форматирования.

Перепишите для полноты:

#include <iostream>
#include <iomanip>

int main()
{
    //    floating point formatting example

    double d = 122.345;
    cout << std::fixed << std::setprecision(2) << d << endl;
    //    Output:  122.34


    //    integer formatting example

    int i = 122;
    cout << std::fixed << std::setprecision(2) << double(i) << endl;
    //    Output:  122.00
}
2 голосов
/ 25 июля 2017

У меня была похожая проблема в конкурсе по программированию, и я так решил ее.Установка точности 2 для всех двойных значений

Сначала добавляем заголовок для использования setprecision

#include <iomanip>

Затем добавляем следующий код в наш основной

  double answer=5.9999;
  double answer2=5.0000;
  cout<<setprecision(2)<<fixed;
  cout <<answer << endl;
  cout <<answer2 << endl;

Вывод:

5.99
5.00

Вам нужно использовать фиксированный для записи 5.00, поэтому ваш вывод не будет на 5.00.

Краткая ссылка видео ссылка IДобавляю что полезно

2 голосов
/ 06 мая 2011

Необходимо установить фиксированный режим плавания.

float num = 15.839;

// this will output 15.84
std::cout << std::fixed << "num = " << std::setprecision(2) << num << std::endl;
1 голос
/ 28 ноября 2016

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

cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);

Затем напечатайте двойные значения.

Это пример:

#include <iostream>
using std::cout;
using std::ios;
using std::endl;

int main(int argc, char *argv[]) {
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    double d = 10.90;
    cout << d << endl;
    return 0;
}
0 голосов
/ 26 марта 2017
#include<stdio.h>
int main()

{

 double d=15.6464545347;

printf("%0.2lf",d);

}
0 голосов
/ 25 октября 2016

Просто второстепенная точка;поместите следующее в заголовок

используя пространство имен std;

затем

std :: cout << std :: fixed << std :: setprecision (2) <<d; </p>

упрощается до

cout << fixed << setprecision (2) << d; </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...