C++: не разобрался с cout.precision

Модератор: Модераторы разделов

Аватара пользователя
ArkanJR
Сообщения: 1132

C++: не разобрался с cout.precision

Сообщение ArkanJR »

Имеется код:

Код: Выделить всё

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
system("clear");
int i = 3;
double j = 2.777777;
j = j + i;
double d3;
int a1 = 2;
int a2 = 3;
d3 = static_cast<double>(a1) / a2;
cout.precision(5);
cout << j << endl;
cout << d3;
return 0;
}

При выполнении полученного бинарика выдаётся результат:
5.7778
0.66667

Получается, что по факту cout.precision(5); распространяется только на переменную d3, для переменной j задано 4 знака после запятой, да и то, непонятно каким образом. Подскажите, пожалуйста, в чём тут дело?
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++: не разобрался с cout.precision

Сообщение NickLion »

Для формата с плавающей запятой .precision(5) — задаёт не 5 знаков после точки, а 5 значащих знаков. Чтобы получить 5 после точки, надо переключить в режим с фиксированной точкой:

Код: Выделить всё

    std::cout.precision(5);
    std::cout.setf(std::ios::fixed);
Спасибо сказали:

Аватара пользователя
ArkanJR
Сообщения: 1132

Re: C++: не разобрался с cout.precision

Сообщение ArkanJR »

NickLion писал(а):
08.06.2014 10:54
Для формата с плавающей запятой .precision(5) — задаёт не 5 знаков после точки, а 5 значащих знаков. Чтобы получить 5 после точки, надо переключить в режим с фиксированной точкой:

Код: Выделить всё

    std::cout.precision(5);
    std::cout.setf(std::ios::fixed);

Но в "Самоучителе C++" от Крупника сказано, что cout.precision(5) задаёт число знаков после запятой.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

IMB
Сообщения: 2516
ОС: Debian

Re: C++: не разобрался с cout.precision

Сообщение IMB »

Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++: не разобрался с cout.precision

Сообщение NickLion »

ArkanJR писал(а):
08.06.2014 14:01
Но в "Самоучителе C++" от Крупника сказано, что cout.precision(5) задаёт число знаков после запятой.

Значит, неправильно сказано. IMB уже кинул ссылку.
Спасибо сказали: