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

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

Ответить
Аватара пользователя
ArkanJR
Сообщения: 1166
Статус: Профан

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 знака после запятой, да и то, непонятно каким образом. Подскажите, пожалуйста, в чём тут дело?
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
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
Сообщения: 1166
Статус: Профан

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) задаёт число знаков после запятой.
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

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

Сообщение NickLion »

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

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