Pergunta

Eu estou aprendendo a setw e setprecision funções, então aqui está o que eu tenho tentado até agora, e eu tenho algumas perguntas.

#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;
}

E a entrada é de :

      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

Então, agora as minhas perguntas são :

1) Por que usar "fixo" em primeiro lugar?

Se olharmos para este exemplo:

cout << setw(11) << setprecision(1) << x << endl;
cout << fixed << setw(11) << setprecision(1) << x << endl;

Eles de saída o mesmo valor, então o que faz fixas realmente mudar?

2) Como é que setw funcionam para números negativos?

No último exemplo de m.O resultado é o mesmo para todos os exemplos, o que faz o sinal de mudança no setw ?

213565552.0
213565552.0
213565552.0
213565552.0

Onde é que esses números vêm de?O valor de m é totalmente diferente daqueles produzidos.

3) Não .o número conta como 1 lugar?

Por exemplo, temos o número de 1,23 e setw(10)

Não seria de 6 espaços antes e depois de 1,23 (porque o ponto é contado como 1).Será que é verdade?

4) Por que setprecision é usado juntamente com setw?Por que 0000s aparecer se ele não é usado?Ela aparece como muitas 0s como o flutuador pode manipular?

5) Qual é o valor para x

213565552.000
 213565552.000
  213565552.000
213565552.000

Se x = 213565544.4826.

Onde é que os números 44.4826 se perder?

Foi útil?

Solução

Estes parecem ser 5 perguntas em vez de um.De qualquer maneira:

  1. std::fixed é usado para indicar que deseja sempre ter um ponto fixo de formato, em vez de usar a notação científica, onde esta notação é mais apropriado.Quando há muitos dígitos necessários para representar o valor razoavelmente, o formato vai mudar usar x.yyyyyyEee (você pode pedir para usar sempre usando o formato científico std::scientific).
  2. std::setw() não importa o que o valor é formatado!Quando um valor é formatado e há um positivo out.width() definido, a saída vai ser preenchido com out.fill() personagem para ser pelo menos out.width() caracteres de largura.Se o resultado for maior do que out.width() de qualquer maneira, nenhum preenchimento ocorrerá.Depois de cada operação de saída [que leva out.width() em conta] o out.width() é redefinido para 0 (todas as outras opções de formatação não são automaticamente repostos).
  3. Qualquer caractere conta para a largura, incluindo o sinal, os separadores de milhar, pontos decimais, etc.O ponto decimal não contam para a precisão: out.precision() é o número de dígitos fracionários (para std::fixed formatação) ou o número de não-expoente dígitos (por std::scientific formatação).
  4. A largura é de quantos caracteres serão preenchidas pelos saída, a precisão especifica quantas [fracionário] dígitos são produzidos.
  5. Binário valores de ponto flutuante pode representar muito poucos dígitos decimais (por float é normalmente 6;você pode descobrir quantos dígitos podem ser utilizados com segurança usando std::numeric_limits<float>::digits10).Tentando usar mais dígitos do que o que provavelmente resultará em resultados inesperados quando o processamento de valores decimais (quando o processamento de valores binários, você pode estar interessado em std:numeric_limits<float>::digits lugares).Você pode querer ter um olhar para O Que Todo Cientista Da Computação Deveria Saber Sobre Aritmética De Ponto Flutuante.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top