Ausgabeformatierungsproblem
-
Naja, das will ich ja ned, das hätte ich eh scho hinbekommen.
Dann wäre die Ausgabe ja:
1.20
4.00
3.35
19.00Es soll aber immer so aussehen: (andere Beispiel damit man es besser sieht)
Ich gebe ein:
1
2
1.1
2.3423Ausgabe soll sein:
1.0
2.0
1.1
2.3423Und das check i ned wie ich das machen soll
-
Dann versuch halt mal
cout<<fixed<<showpoint<<setprecision(1);EDIT: Ups, sorry hab nicht gesehen das es auch mehrere Nachkommastellen sein können.
-
Das geht ja auch ned, weil mir wenn ich mehr als 1 Nachkommastelle habe, diese beim Ausgeben weggeschnitten werden.
Also aus 23.34323 wird 23.3
-
Hallo
Du könntest die Nachkommastellen abfragen und die Präzision dementsprechend setzen.
chrische
-
Die Idee klingt gut, nur hab ich ehrlich gesagt keine Ahnung wie ich die Nachkommastellenanzahl abfrage

Wäre toll wenn mir das auch noch jemand erklären könnte...
-
also eine ganz einfache methode wäre die
float a; cin>>a; cout<<fixed<<showpoint<<setprecision(1); if(a<0.1) cout<<fixed<<showpoint<<setprecision(2); if(a<0.01) cout<<fixed<<showpoint<<setprecision(3); if(a<0.001) cout<<fixed<<showpoint<<setprecision(4); cout<<a<<endl;
-
Also das versteh ich jetzt ned.
Das funktioniert ja nur wenn ich zahlen eingebe die mit 0. beginnen.
Wenn ich 2.3343 eingeben würde, würde dann schätz ich mal 2.3 raus kommen, oder nicht?
Also wenn es nicht so ist, dann wärs toll wenn mir jemand erklärt warum das funktionert. Weil das überfordert dann meine c++ Kenntnisse...
-
ne, so gehts nicht...
du musst das dann so abfragen:
if(a-floor(a)) < 0.001f)
setprecision...edit: wobei das auch noch nciht reicht...

-
Lass dir die Ausgabe doch einfach in einen StringStream eintragen, anstatt direkt auf cout und schaue einfach nach, ob ein "." drin vorkommt. Wenn nicht dann einfach ".0" anhängen und den Text ausgeben.
-
OK, ich habe mir jetzt folgendes überlegt.
Es würde genügen wenn ich herausfinden könnte ob ein double eine Ganzzahl beinhaltet. Und wenn das der Fall ist mache ich ein setprecision(1) und sonst gebe ich es ganz normal aus.
Also ich hätte es ja wie folgt überprüft
if(a = (long)a)
Das funktioniert aber leider auch nur bis zu einer bestimmten Größe des double Werts.
Weiß irgendwer eine Lösung die das immer schafft?
-
Wenn dir mein obiger Vorschlag nicht zusagt, dann nimm doch
if(a == floor(a))wobei du besser noch einen "Epsilon"-Vergleich nehmen solltest, also wie Maxi schon geschrieben hat:
if(a-floor(a)) < 1e-20)
-
Achso, ich habe deine Antwort gar nicht bemerkt, weil die auf der 2. Seite war. Ich werd das gleich mal ausprobieren ob das den gewünschten Effekt hat.