Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Valor double sale con 6 decimales y otro con 4, aún usando fixed y setprecision!

Estas en el tema de Valor double sale con 6 decimales y otro con 4, aún usando fixed y setprecision! en el foro de C/C++ en Foros del Web. Ahm... bueno, la verdad es que no tengo ni idea de por qué pasa, les dejo el código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include ...
  #1 (permalink)  
Antiguo 23/11/2012, 03:52
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años
Puntos: 8
Pregunta Valor double sale con 6 decimales y otro con 4, aún usando fixed y setprecision!

Ahm... bueno, la verdad es que no tengo ni idea de por qué pasa, les dejo el código:

Código C++:
Ver original
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5. using std::fixed;
  6.  
  7. #include <iomanip>
  8. using std::setprecision;
  9.  
  10. #include "Gasolina.h"
  11.  
  12. void Gasolina::empezar()
  13. {
  14.     int km;
  15.     int kmt = 0;
  16.     int lt;
  17.     int ltt = 0;
  18.     double kpla;
  19.     double kpl;
  20.  
  21.     cout << "Escriba los kilometros usados (-1 para salir): ";
  22.     cin >> km;
  23.  
  24.     while(km > 0)
  25.     {
  26.         cout << "Escriba los litros: ";
  27.         cin >> lt;
  28.         if(lt > 0)
  29.         {
  30.             kmt += km;
  31.             ltt += lt;
  32.             kpla = static_cast<double>(km) / lt;
  33.             kpl = static_cast<double>(kmt) / ltt;
  34.  
  35.             cout << "KPL en este abastecimiento: " << setprecision(6) << kpla <<                fixed << endl; // Aquí (?)
  36.             cout << "Total KPL: " << setprecision(6) << kpl << fixed << endl; // y aquí.
  37.             cout << "\n";
  38.  
  39.             cout << "Escriba los kilometros usados (-1 para salir): ";
  40.             cin >> km;
  41.         }
  42.         else
  43.             cout << "Valor incorrecto." << endl;
  44.     }
  45. }

Bueno, ahora sí.

Ingreso datos:

Kilometros usados: 287
Litros: 13

y por alguna razón en la salida me da:

KPL en este abastecimiento: 22.0769
Total KPL: 22.076923

Como verán, un double me lo muestra con 4 decimales y el otro con 6...

¿Qué he hecho mal? Ojalá alguien me explique.

Saludos!
  #2 (permalink)  
Antiguo 23/11/2012, 11:33
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Valor double sale con 6 decimales y otro con 4, aún usando fixed y setprec

Revisa tu manual de c++ - iomanip:

Código:
cout << fixed;
cout << "KPL en este abastecimiento: " << setprecision(6) << kpla << endl;
cout << "Total KPL: " << setprecision(6) << kpl << endl;
cout << "\n";
El flag fixed tiene que estar antes de la salida, si no como esperas que formatee el dato una vez enviado a pantalla? En tu caso lo tienes despues de mostrar 'kpla', por eso para el 'kpla' formatea a 6 valores (2 enteros mas 4 decimales) y 'kpl' formatea a 6 decimales

Saludos
vosk

Etiquetas: double, fallo, fixed, iomanip, precision
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:50.