STED конкретного целого числа с точностью SET в C ++

StackOverflow https://stackoverflow.com/questions/19824845

Вопрос

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



x
213565552.000
 213565552.000
  213565552.000
213565552.000


z
213565552.0
 213565552.0
213565552.0
 213565552.0



m
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? Почему 0000s появляются, если он не используется? Появляется ли это столько 0s, сколько может справиться с поплавком?

5) Почему значение для x

213565552.000
 213565552.000
  213565552.000
213565552.000

Если x = 213565544.4826.

Где числа 44,4826 теряются?

Это было полезно?

Решение

Это, кажется, 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 места). Вы можете взглянуть на Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top