число с плавающей запятой — набор определенного целого числа с заданной точностью в переполнении стека

Я изучаю функции 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?

0

Решение

Кажется, это 5 вопросов, а не один. Тем не мение:

  1. std::fixed используется, чтобы указать, что вы всегда хотите иметь формат с фиксированной запятой, а не использовать научную запись, где эта запись более подходит. Если для представления значения достаточно много цифр, формат переключится на использование x.yyyyyyEee (вы можете попросить всегда использовать научный формат, используя std::scientific).
  2. std::setw() не важно какое значение отформатировано! Когда значение отформатировано и есть положительный out.width() установить, выход будет дополнен out.fill() персонаж должен быть хотя бы out.width() широкие символы Если выход больше, чем out.width() в любом случае, отступы не возникнут. После каждой операции вывода [которая занимает out.width() в счет] out.width() сбрасывается на 0 (все остальные параметры форматирования не сбрасываются автоматически).
  3. Любой символ учитывается по ширине, включая знак, разделители тысяч, десятичные точки и т. Д. Десятичная точка не учитывается в точности: out.precision() количество дробных цифр (для std::fixed форматирование) или число неэкспонентных цифр (для std::scientific форматирование).
  4. Ширина — это количество символов, которые будут заполнены выводом, точность определяет, сколько [дробных] цифр должно быть получено.
  5. Двоичные значения с плавающей запятой могут представлять очень мало десятичных цифр (для float обычно это 6; Вы можете узнать, сколько цифр можно безопасно использовать, используя std::numeric_limits<float>::digits10). Попытка использовать больше цифр, чем это, вероятно, приведет к неожиданному выводу при обработке десятичных значений (при обработке двоичных значений вас может заинтересовать до std:numeric_limits<float>::digits места). Возможно, вы захотите взглянуть на Что каждый компьютерщик должен знать об арифметике с плавающей точкой.
3

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

Других решений пока нет …

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