2011-03-06 18 views
37
double x = 1500; 
for(int k =0; k<10 ; k++){ 
    double t =0; 
    for(int i=0; i<12; i++){ 
     t += (double) x * 0.0675; 
     x += (double) x * 0.0675; 
    } 
    cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;  
} 

esta la salidaComo hacer C++ cout no utilizar la notación científica

Bas ana: 3.284,78 Hijo faiz: 1.784,78 Hijo ana: 5069,55

Bas ana: 7.193,17 Hijo faiz: 3908.4 Hijo ana : 11101,6

Bas ana: 15752 Hijo faiz: 8558.8 Hijo ana: 24310,8

Bas ana: 34.494,5 Hijo faiz: 18.742,5 Hijo ana: 53237

Bas ana: 75.537,8 Hijo faiz: 41.043,3 Hijo ana: 116581

Bas ana: 165417 Hijo faiz: 89.878,7 Hijo ana: 255295

Bas ana: 362238 Hijo faiz: 196821 Hijo ana: 559059

Bas ana: 793246 Hijo faiz: 431009 Hijo ana: 1.22426e + 006

Bas ana: 1.73709e + Hijo 006 faiz: 943845 Hijo ana: 2.68094e + 006

Bas ana: 3.80397e + 006 Hijo faiz: 2.06688e + 006 Hijo ana: 5.87085e + 006

Quiero los números que se muestran con números exactos no números científicas. ¿Cómo puedo hacer esto?

+6

¿Por qué estás emitiendo un 'doble' al' doble'? –

+2

posible duplicado de [Impedir la notación científica en ostream cuando se usa << con doble] (http://stackoverflow.com/questions/2335657/prevent-scientific-notation-in-ostream-when-using-with-double) –

Respuesta

57

uso manipulador std::fixed corriente:

cout<<fixed<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl; 
1

Hay toda una serie de operadores de formato que se obtiene con iostream. Aquí hay un tutorial para comenzar.

14

Como se mencionó anteriormente, se puede utilizar std :: fijo para resolver su problema, así:

cout << fixed; 
cout << "Bas ana: " << x << "\tSon faiz: " << t << "\tSon ana: " << x+t <<endl; 

Sin embargo, después de haber hecho esto , cada vez que imprima un flotador o un doble en cualquier lugar de su proyecto, el número se seguirá imprimiendo con esta notación fija. Usted puede volver atrás utilizando

cout << scientific; 

pero esto puede ser tedioso si su código se vuelve más complicado.

Es por esto que Boost creó I/O Stream State Saver, que devuelve automáticamente la transmisión de E/S que está utilizando al estado que tenía antes de su llamada de función. Se puede utilizar de esta manera:

#include <boost/io/ios_state.hpp> // you need to download these headers first 

{ 
    boost::io::ios_flags_saver ifs(os); 

    cout << ios::fixed; 
    cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl; 

} // at this bracket, when ifs goes "out of scope", your stream is reset 

Puede encontrar más información sobre E/S Corriente Ahorro Estado de Boost en the official docs.

Es posible que también desee comprobar el Boost Format library que también puede facilitar su salida, especialmente si tiene que tratar con la internacionalización. Sin embargo, no te ayudará para este problema en particular.

Cuestiones relacionadas