Я изучаю функции setw и setprecision, так что вот что я пробовал до сих пор, и у меня есть несколько вопросов.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float y = 1.25;
cout << fixed << setw(10) << setprecision(2) << y << endl;
cout << "\n\n\nx\n";
float x = 213565544.4826;
cout << fixed << setw(13) << setprecision(3) << x << endl;
cout << fixed << setw(14) << setprecision(3) << x << endl;
cout << fixed << setw(15) << setprecision(3) << x << endl;
cout << fixed << setprecision(3) << x;
cout << "\n\n\nz\n";
float z = 213565544.4826;
cout << setw(11) << setprecision(1) << x << endl;
cout << fixed << setw(12) << setprecision(1) << x << endl;
cout << fixed << setw(11) << setprecision(1) << x << endl;
cout << setw(12) << setprecision(1) << x << endl;
cout << "\n\n\nm\n";
float m = -344.275;
cout << fixed << setprecision(1) << x << endl;
cout << fixed << setw(8) << setprecision(1) << x << endl;
cout << fixed << setw(7) << setprecision(1) << x << endl;
cout << fixed << setw(6) << setprecision(1) << x << endl;
return 0;
}
И вход:
1.25x
213565552.000
213565552.000
213565552.000
213565552.000z
213565552.0
213565552.0
213565552.0
213565552.0m
213565552.0
213565552.0
213565552.0
213565552.0
Итак, теперь мои вопросы:
1) Почему мы используем «исправлено» в первую очередь?
Если мы посмотрим на этот пример:
cout << setw(11) << setprecision(1) << x << endl;
cout << fixed << setw(11) << setprecision(1) << x << endl;
Они выводят одно и то же значение, так что же на самом деле меняет фиксированное значение?
2) Как работает setw для отрицательных чисел?
В последнем примере м. Результат одинаков для всех примеров. Что меняет знак в setw?
213565552.0
213565552.0
213565552.0
213565552.0
Откуда эти цифры? Значение m полностью отличается от выводимых.
3) ли. по количеству считается за 1 место?
Например, у нас есть номер 1.23 и setw (10)
До этого будет 6 пробелов, а затем 1,23 (потому что точка считается как 1). Это правда?
4) Почему setprecision используется вместе с setw? Почему появляется 0000, если он не используется? Появляется ли столько нулей, сколько может обработать float?
5) Почему значение для х
213565552.000
213565552.000
213565552.000
213565552.000
Если х = 213565544,4826.
Где теряются цифры 44.4826?
Кажется, это 5 вопросов, а не один. Тем не мение:
std::fixed
используется, чтобы указать, что вы всегда хотите иметь формат с фиксированной запятой, а не использовать научную запись, где эта запись более подходит. Если для представления значения достаточно много цифр, формат переключится на использование x.yyyyyyEee
(вы можете попросить всегда использовать научный формат, используя std::scientific
).std::setw()
не важно какое значение отформатировано! Когда значение отформатировано и есть положительный out.width()
установить, выход будет дополнен out.fill()
персонаж должен быть хотя бы out.width()
широкие символы Если выход больше, чем out.width()
в любом случае, отступы не возникнут. После каждой операции вывода [которая занимает out.width()
в счет] out.width()
сбрасывается на 0
(все остальные параметры форматирования не сбрасываются автоматически).out.precision()
количество дробных цифр (для std::fixed
форматирование) или число неэкспонентных цифр (для std::scientific
форматирование).float
обычно это 6; Вы можете узнать, сколько цифр можно безопасно использовать, используя std::numeric_limits<float>::digits10
). Попытка использовать больше цифр, чем это, вероятно, приведет к неожиданному выводу при обработке десятичных значений (при обработке двоичных значений вас может заинтересовать до std:numeric_limits<float>::digits
места). Возможно, вы захотите взглянуть на Что каждый компьютерщик должен знать об арифметике с плавающей точкой.Других решений пока нет …