2014-03-13 13 views
6

Wie kann ichWie mache ich "std :: cout << 123456789.12" drucken "123456789.12"?

std::cout << 123456789.12 

druck machen:

123456789.12 

Es druckt immer dies:

1.23457e+008 

Ich weiß, dass ich mit den Flaggen spielen, aber ich kann nicht ganz Finde die richtige Kombination heraus. Wenn ich den festen Flag gesetzt, druckt er

123456789.120000 
+2

std :: setprecision: http://en.cppreference.com/w/cpp/io/manip/setprecision – willll

+0

??? NEW CPP Programmierer warum hast du die STL Flag hinzugefügt ?? Anyways Sie können die Genauigkeit durch 'std :: setprecision (int)' versuchen, 'std :: cout << std :: setprecission (20) << 123456789.12 << endl;' – DOOM

+0

Siehe http://stackoverflow.com/questions/22177656/convert-double-to-string-with-fixed-point-notation-no-trailing-zeroes-and-witou –

Antwort

1

können Sie verwenden:

#include <iostream> 
#include <limits> 
using namespace std; 

int main() { 
    double c = 123456789.12; 
    cout.precision(numeric_limits<double>::digits10 + 1); 
    cout << c << endl; 

    return 0; 
} 

Grundsätzlich ist die limits package hat Züge für die ganze Build -in Typen. Eine der Eigenschaften für Fließkommazahlen (float/double/long double) ist die digits10 attribute. Dies definiert die Genauigkeit einer Gleitkommazahl in Basis 10

es richtig angezeigt zu: http://ideone.com/Ity9m7


Zum Lesen auf, eine ähnliche Frage check out: How do I print a double value with full precision using cout?

+2

Beachten Sie, dass die letzte Ziffer, die Sie von '+ 1' erhalten, nicht als nützliche Information zu verstehen ist, außer in der Lage zu sein, den Wert exakt zu serialisieren und wiederherzustellen. – Potatoswatter

11

Wie ...?

One way: -

#include <iostream> 
#include <iomanip> 

int main() { 
    double f =123456789.12; 
    std::cout << std::fixed << std::setprecision(2) << f << '\n'; 
    return 0; 
} 

Siehe here

Bitte schaue dir die entsprechenden Referenzen