2016-03-29 4 views
1

Ich habe ein Problem, wo ich einige doppelte Wert drucken muss mit grundlegenden C++ Ausgabesystem (wie Iostream oder Sstream) und dieser Wert wird irgendwie sehr abgeschnitten. Zum Beispiel:Doppelte Zahlen Ausgabe wird abgeschnitten

double a = 283752.24234; 
    std::cout << 283752.24234 << std::endl; 
    std::cout << a << std::endl; 

beide Ausgänge werden 283.752

Warum ist das passiert und was kann ich tun vollständige Ausgabe eines doppelten Wert zu erhalten?

+0

Dies ist nicht das Problem, aber nicht verwenden 'std :: endl', wenn Sie das Extramaterial benötigen, dass es funktioniert. '\ n'' beendet eine Zeile. –

+2

@PeteBecker 'flush()' könnte eigentlich für dieses Beispiel gewünscht sein. Verwechsle das OP nicht. –

+0

@ πάνταῥεῖ - Ich sehe es nicht. Es ist Routineausgabe. 'flush()' ist sinnlos. –

Antwort

2

Warum ist das passiert ...

Das ist, weil die default precision 6 ist und somit nur die vordersten 6 Ziffern 283752 gemacht.

... und was kann ich tun, um die vollständige Ausgabe eines beliebigen doppelten Werts zu erhalten?

  1. erste Option ist, einen größeren precision Wert zu verwenden, mit dem std::setprecision() I/O-Manipulator:

    #include <iostream> 
    #include <iomanip> 
    
    int main(){ 
        double a = 283752.24234; 
    
        std::cout << std::setprecision(12) << 283752.24234 << std::endl; 
        std::cout << std::setprecision(12) << a << std::endl; 
    } 
    

    Live Demo Siehe

  2. Zweite Option ist die std::fixed I/O verwenden Manipulator, um die Werte nach dem Dezimalpunkt anzuzeigen:

    #include <iostream> 
    #include <iomanip> 
    
    int main(){ 
        double a = 283752.24234; 
    
        std::cout << std::fixed << 283752.24234 << std::endl; 
        std::cout << std::fixed << a << std::endl; 
    } 
    

    Siehe Live Demo

Ausgang:

283752.242340 
283752.242340