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

gesetzt
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!

War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top