Почему мой код cout отображает десятичные знаки непоследовательно?

Я работаю над приложением, которое должно печатать массив через cout на одной строке и показывать 2 десятичных знака. В настоящее время мой код печатает первые два элемента с двумя десятичными знаками, а затем переключается на 1.

Вот код:

cout << "  Inches ";
cout << showpoint << setprecision(2) << right;
for (int i = 0; i < 12; i++)
{
cout << setw(5) << precipitation[i];
}
cout << endl;

И вот вывод:

Inches 0.72 0.89 2.0 3.0 4.8 4.2 2.8 3.8 2.7 2.1 1.6 1.0

Может кто-нибудь сказать мне, почему происходит такое изменение точности и что я могу сделать, чтобы это исправить?

Спасибо

0

Решение

Вам нужно использовать «фиксированный» режим. В стандартном режиме с плавающей запятой точность () устанавливает количество значащих цифр для отображения. В «фиксированном» режиме он устанавливает количество знаков после запятой. Дело в точке:

#include <iostream>
using namespace std;
int main(int argc, char **argv) {
float pi = 3.14;
cout.precision(2);
cout << pi << endl;
cout << fixed << pi << endl;
}

Дает вывод:

3.1
3.14

НТН.

5

Другие решения

Если вы просто добавите Cout << исправленный перед выходными операторами, в дополнение к showpoint и setprecision, вы получите согласованное форматирование для всех выходных данных.

Увидеть ниже:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
double precipitation[12] = { .72, .89, 2, 3, 4.8, 4.2, 2.8, 3.8, 2.7, 2.1, 1.6, 1 };
cout << "  Inches ";
cout << showpoint << fixed << setprecision(2) << right;
for (int i = 0; i < 12; i++)
{
cout << setw(5) << precipitation[i];
}
cout << endl;

return 0;
}

Теперь результат будет следующим:

Inches  0.72 0.89 2.00 3.00 4.80 4.20 2.80 3.80 2.70 2.10 1.60 1.00
1

Я тоже был обеспокоен этой проблемой. Вы должны использовать «исправлено», чтобы сделать это.

Обратитесь к этой ссылке:
C ++ setprecision (2) печатать один десятичный знак?

0
По вопросам рекламы [email protected]