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