Question

J'apprends les fonctions SETW et Setprecision, alors voici ce que j'ai essayé jusqu'à présent et j'ai quelques questions.

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

Et l'entrée est:

      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

Alors, maintenant mes questions sont:

1) Pourquoi utilisons-nous "fixe" en premier lieu?

Si nous regardons cet exemple:

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

Ils produisent la même valeur, alors qu'est-ce que fixe change vraiment?

2) Comment fonctionne SETW pour des nombres négatifs?

Dans le dernier exemple de m. Le résultat est le même pour tous les exemples, qu'est-ce que le signe change dans le SETW?

213565552.0
213565552.0
213565552.0
213565552.0

D'où viennent ces chiffres? La valeur de m est totalement différente de celles publiées.

3) fait le. dans le nombre compte de 1 place?

Par exemple, nous avons le numéro 1.23 et SETW (10)

Il y aurait 6 espaces avant puis 1,23 (car le point est compté comme 1). Est-ce vrai?

4) Pourquoi Setprécision est-elle utilisée avec SETW? Pourquoi les 0000 apparaissent-ils s'il n'est pas utilisé? Semble-t-il autant de 0 que le flotteur peut gérer?

5) Pourquoi la valeur de x est-elle

213565552.000
 213565552.000
  213565552.000
213565552.000

Si x = 213565544.4826.

Où les numéros 44.4826 se perdent-ils?

Était-ce utile?

La solution

Cela semble être 5 questions plutôt qu'une seule. De toute façon:

  1. std::fixed est utilisé pour indiquer que vous voulez toujours avoir un format de point fixe plutôt que d'utiliser une notation scientifique où cette notation est plus appropriée. Lorsqu'il y a de nombreux chiffres nécessaires pour représenter raisonnablement la valeur, le format changera d'utilisation x.yyyyyyEee (Vous pouvez demander à toujours utiliser le format scientifique en utilisant std::scientific).
  2. std::setw() Ne se soucie pas de la valeur formatée! Lorsqu'une valeur est formatée et qu'il y a un positif out.width() Ensemble, la sortie sera rembourrée avec out.fill() caractère pour être au moins out.width() personnages larges. Si la sortie est plus grande que out.width() Quoi qu'il en soit, aucun rembourrage ne se produira. Après chaque opération de sortie [qui prend out.width() en compte] le out.width() est réinitialisé avec 0 (Toutes les autres options de formatage ne sont pas réinitialisées automatiquement).
  3. Tout caractère compte pour la largeur, y compris le signe, des milliers de séparateurs, des points décimaux, etc. Le point décimal ne compte pas pour la précision: out.precision() est le nombre de chiffres fractionnaires (pour std::fixed formatage) ou le nombre de chiffres non exposants (pour std::scientific mise en page).
  4. La largeur est le nombre de caractères remplis par la sortie, la précision spécifie le nombre de chiffres [fractionnaires] à produire.
  5. Les valeurs de points flottants binaires peuvent représenter très peu de chiffres décimaux (pour float c'est normalement 6; Vous pouvez découvrir combien de chiffres peuvent être utilisés en toute sécurité en utilisant std::numeric_limits<float>::digits10). Essayer d'utiliser plus de chiffres que cela entraînera probablement une sortie inattendue lors du traitement des valeurs décimales (lors du traitement des valeurs binaires std:numeric_limits<float>::digits des endroits). Vous voudrez peut-être jeter un œil Ce que chaque informaticien doit savoir sur l'arithmétique à virgule flottante.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top