Pregunta

Estoy aprendiendo las funciones SetW y SetPrecision, así que esto es lo que he estado intentando hasta ahora y tengo algunas preguntas.

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

Y la entrada es:

      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

Entonces, ahora mis preguntas son:

1) ¿Por qué usamos "arreglado" en primer lugar?

Si miramos este ejemplo:

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

Ocurren el mismo valor, entonces, ¿qué cambia realmente fijado?

2) ¿Cómo funciona SETW para números negativos?

En el último ejemplo de m. El resultado es el mismo para todos los ejemplos, ¿qué cambia el signo en el SETW?

213565552.0
213565552.0
213565552.0
213565552.0

¿De dónde vienen estos números? El valor de M es totalmente diferente de los que se obtienen.

3) hace el. en el número cuenta como 1 lugar?

Por ejemplo, tenemos el número 1.23 y setw (10)

Habría 6 espacios antes y luego 1.23 (porque el punto se cuenta como 1). ¿Es eso cierto?

4) ¿Por qué SetPrecision se usa junto con SETW? ¿Por qué aparecen 0000 si no se usa? ¿Aparece tantos 0 como el flotador puede manejar?

5) ¿Por qué es el valor para x?

213565552.000
 213565552.000
  213565552.000
213565552.000

Si x = 213565544.4826.

¿Dónde se pierden los números 44.4826?

¿Fue útil?

Solución

Estas parecen ser 5 preguntas en lugar de una. De todos modos:

  1. std::fixed se usa para indicar que siempre desea tener un formato de punto fijo en lugar de usar notación científica donde esta notación es más apropiada. Cuando se necesitan muchos dígitos para representar el valor razonablemente, el formato cambiará el uso x.yyyyyyEee (puede pedir que use siempre formato científico usando std::scientific).
  2. std::setw() ¡No le importa qué valor está formateado! Cuando se formateado un valor y hay un positivo out.width() establecido, la salida estará acolchada con out.fill() personaje para ser al menos out.width() personajes de ancho. Si la salida es más grande que out.width() De todos modos, no se producirá relleno. Después de cada operación de salida [que toma out.width() en cuenta] el out.width() se restablece a 0 (Todas las demás opciones de formato no se restablecen automáticamente).
  3. Cualquier personaje cuenta para el ancho, incluido el signo, miles de separadores, puntos decimales, etc. El punto decimal no cuenta para la precisión: out.precision() es el número de dígitos fraccionales (para std::fixed formato) o el número de dígitos no exponentes (para std::scientific formato).
  4. El ancho es cuántos caracteres serán llenados por la salida, la precisión especifica cuántos dígitos [fraccionales] se producirán.
  5. Los valores de punto flotante binario pueden representar muy pocos dígitos decimales (para float es normalmente 6; Puede averiguar cuántos dígitos se pueden usar de forma segura utilizando std::numeric_limits<float>::digits10). Intentar usar más dígitos que eso probablemente dará como resultado una salida inesperada al procesar valores decimales (cuando procese los valores binarios en los que puede estar interesado hasta std:numeric_limits<float>::digits lugares). Es posible que desee echar un vistazo Lo que todo informático debe saber sobre la aritmética de punto flotante.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top