2016-09-08 1 views
2

Ich versuche setprecision in C++ zu verwenden. Hier ist, was ich bin doing-Verwendung von setprecision in C++

ich eine Ausgabedatei habe, wo ich den ergebnis-

Meinen ersten Anruf schreibe druckt den zins_rate korrekt zu funktionieren. Sprich ich die Funktion mit interest_rate=0.035 nennen, so dass ich die folgende Ausgabe -

Annual Interest Rate: 0.035 

Aber das nächste Mal, wenn ich mit der Funktion mit dem gleichen interest_rate i.e. 0.035 nennen, erhalte ich die folgende Output-

Annual Interest Rate: 0.04 

Ich möchte die gleiche Ausgabe in beiden Fällen, warum passiert das?

Edit: - hier ist die Code-

#include <iostream> 
#include <fstream> 
#include <string> 
#include <iomanip> 

Hier wird die Eingabedatei: - input.txt

3 
1000.00 
0.035 
120.00 
5000.00 
0.04 
165.00 
200000.00 
0.055 
2250.00 

Hier ist die Ausgabedatei erhalte ich:

Annual Interest Rate: 0.035 
1   1000.00 
2   1000.00 
3   1000.00 
4   1000.00 
Annual Interest Rate: 0.04 
1   5000.00 
2   5000.00 
3   5000.00 
4   5000.00 
Annual Interest Rate: 0.06 
1   200000.00 
2   200000.00 
3   200000.00 
4   200000.00 

Beachten Sie, wie die 0,055 in der Eingabedatei wird als 0,06 in der Ausgabedatei

+3

Könnten Sie bitte ein [mcve] posten? – jaggedSpire

+2

Ihr Code passt nicht zu Ihrem Problem. Können Sie den Code anzeigen, in dem "_der Input" 0,035 ist, aber es gibt aus: 'Annual Interest Rate: 0,035' dann' 0,04'_ "? –

+0

Sie liegen beide falsch, der Code ist ausreichend und @ Dieters Antwort erklärt, was passiert. Klarheit könnte im zweiten Teil verbessert werden, aber die Info ist da – sokkyoku

Antwort

5

Einige Stream-Manipulatoren/Fahnen nur einmal anwenden gedruckt (z .: setw) und andere bleiben gültig, bis sie (z .: fixed und setprecision) geändert werden.

Ich nehme an, im ersten Aufruf der Funktion verwenden Sie das Standardformat (nicht fixed und nicht scientific) und Standardpräzision (6) des Streams.

Im zweiten Aufruf der Funktion (ich nehme an, Sie ändern es in der Zwischenzeit nicht in einer anderen Funktion) haben Sie das Format fixed und eine Genauigkeit von zwei.

+1

@Joker das ist die richtige Antwort. 'setprecision (2)' ist immer noch aktiv – sokkyoku

+0

@Dieter Danke für die Antwort, ich habe versucht, die Genauigkeit auf Standard-Genauigkeit zu ändern, aber dann gibt es 0,035000 statt 0,035. Es setzt die Präzision auf "6" zurück, wie Sie gesagt haben, aber ich möchte "0.035" anzeigen. – Joker

+0

Das liegt daran, dass Sie es auch als "fest" festgelegt haben. Sie können das mit 'outfile.unsetf (ios_base :: fixed) entfernen;' – sokkyoku