2017-09-27 3 views
2

Ich versuche, eine Add-Funktion zu verwenden, um den doppelten Wert zu nehmen und es mit einem anderen doppelten Wert hinzuzufügen, um die Antwort zu erhalten. Ich benutze die Methode/Funktion get, um den Antwortwert zu erhalten. Der Antwortwert wird nur in int und nicht in double angezeigt. Wie zum Beispiel, 12,0 + 10,0 ist gleich 22,0, aber wenn ich das Ergebnis anzeigen es sagt nur 22. Hier ist der Code, an dem ich arbeite ...Doppelte Werte Ausdrücken als Ints

double x = 0.0; 
void addValue(double value) 
{ 
    x = value + x; 
} 

double getValue() 
{ 
    return x; 
} 
int main() 
{ 
    addValue(12.0); 
    addValue(10.0); 
    cout << getValue() << endl; 
    return 0; 
} 

Das Ergebnis dieser Code 22 ist Was Ich versuche zu bekommen ist 22.0

Wie kann ich das behoben, ohne die eingestellte Präzision zu verwenden?

+0

Der 'iomanip' Header hat [setprecision] (http://en.cppreference.com/w/cpp/io/manip/setprecision). Ich kann nicht sagen, ob Sie fragen, wie man die Präzision einstellt, oder wie man es macht, ohne 'setprecision' zu verwenden ... – Jonesinator

+0

@Jonesinator Ich versuche es zu tun, ohne die eingestellte Präzision zu verwenden – Nicole

+0

Warum? Genau dafür ist es da. – Jonesinator

Antwort

1

cout schneidet ab, um Werte zu runden, wenn der Bruch nach dem Dezimalwert 0 ist. Versuchen Sie, beliebige Werte mit echten Bruchwerten wie 12,5 zu drucken, es wird funktionieren. Wenn Sie also den Wert 0 ausgeben möchten, müssen Sie setprecision verwenden oder printf verwenden.

Zum besseren Verständnis können Sie durch diese Frage folgen How do I print a double value with full precision using cout?

+1

Es ist nicht 'std :: cout', das die Anzahl beschränkt Ziffern; es ist der Stream-Inserter (der Operator '<<'). Sie würden das gleiche mit ** jedem ** Ausgabestrom sehen: 'std :: ofstream out (" demo.txt "); aus << 12.0 << '\ n'; '. –

0

können Sie verwenden std :: setprecision Präzision zu setzen, aber es wird nur signifikant (sinnvolle) Ziffern halten Präzision eingestellt. In diesem speziellen Fall ist 0 in 22.0 nicht signifikant. Wenn Sie also wirklich 22.0 ausdrucken wollen, müssen Sie eine feste Genauigkeit einstellen (stellen Sie den Wert auf die gewünschte Zahl ein). Ihr Code wird wie folgt sein.

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

double x = 0.0; 
void addValue(double value) 
{ 
    x = value + x; 
} 

double getValue() 
{ 
    return x; 
} 
int main() 
{ 
    addValue(12.0); 
    addValue(10.0); 
    cout << fixed <<std::setprecision(1) << getValue() << endl; 
    return 0; 
} 
1

Verwenden std::setprecision von #include <iomanip>

std::cout << std::setprecision (15) << getValue() << std::endl;