Я работаю над приложением, которое должно печатать массив через 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
Может кто-нибудь сказать мне, почему происходит такое изменение точности и что я могу сделать, чтобы это исправить?
Спасибо
Вам нужно использовать «фиксированный» режим. В стандартном режиме с плавающей запятой точность () устанавливает количество значащих цифр для отображения. В «фиксированном» режиме он устанавливает количество знаков после запятой. Дело в точке:
#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
НТН.
Если вы просто добавите 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
Я тоже был обеспокоен этой проблемой. Вы должны использовать «исправлено», чтобы сделать это.
Обратитесь к этой ссылке:
C ++ setprecision (2) печатать один десятичный знак?