Это, кажется, 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
места). Вы можете взглянуть на Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой.