Einstellen Mindestanzahl von Dezimalstellen für std :: ostream Präzision
Frage
Gibt es eine Möglichkeit, die „Minimum“ Anzahl der Dezimalstellen eingestellt werden, dass ein std :: ostream ausgeben wird?
Zum Beispiel, sagen, dass ich zwei unbekannte Doppel Variablen haben, dass ich drucken möchten (Werte hier aus Gründen der Erläuterung hinzugefügt):
double a = 0;
double b = 0.123456789;
Ich kann meine maximale Dezimalgenauigkeit, so dass ich Ausgang b
genau
std::cout << std::setprecision(9) << b << std::endl;
>>> 0.123456789
Gibt es eine Möglichkeit, eine „Minimum“ Präzision (eine minimale Anzahl von Dezimalstellen) eingestellt, während der „Maximum“ Präzision beibehalten, so dass
std::cout << a << std::endl << b << std::endl;
Ausbeuten
0.0
0.123456789
nicht
0
0.123456789
Danke! Phil
Die kurze Antwort ist „Nein“. Der Strom hat nur eine Präzisionseinstellung, ohne die Anlage zwischen den maximalen und minimalen Genauigkeit zu unterscheiden. Vielen Dank an Alle für Ihre großzügige Beratung!
Lösung
Ich glaube nicht, es gibt einen Weg zu erreichen, was Sie ohne bitten die Zahl in einen String zu drehen (mit hohen Präzision) und die nachfolgenden Nullen Abstreifen.
Dies ist angemessen, denn gerade weil es nachgestellte Nullen bedeutet nicht, es nicht Präzision gibt es, und die Laufzeit nicht sagen kann.
Zum Beispiel, wenn ich das Gewicht eines Objektes mit einem billigen Maßstab zu messen, kann es 1,0 kg sein.
Wenn ich es mit einem hochgenauen Waage wiegen, kann es 1,00000 kg sein. Nur weil es nachgestellte Nullen, bedeutet nicht, dass die Genauigkeit verworfen werden sollte.
Andere Tipps
cout << setprecision(1) << fixed << d << endl;
Gebraucht nach setprecision festgelegt.
Edit: Das ist das, was Sie wollen. Es wäre Präzision basierend auf d ändern.
cout << setprecision(d?9:1) << fixed << d << endl;