2016-05-31 92 views
1

Ich möchte floats und doubles von Standardeingabe lesen und seine Genauigkeit speichern (genau die gleichen Ziffern nach Gleitkomma) und ausgeben können (cout/printf) wie es ist. Was ist die bequemste (und einfachste Art) dies zu tun? Danke!Speichern von float und doppelter Genauigkeit in C++ während cin/cout und scanf/printf

+1

Da float/double keine unendliche Genauigkeit ist, ist der einzige Weg dies zuverlässig zu tun, es als String einzulesen und den ursprünglichen String zusammen mit dem konvertierten float/double beizubehalten. –

+0

Es ist unmöglich zu tun. Der Grund ist offensichtlich - Fließkommazahlen werden in stdin/stdout als Dezimalzahlen dargestellt (dies ist eine Voraussetzung für Standards). C- oder C++ - Standards geben keine interne Darstellung von Gleitpunktzahlen vor, daher kann keine portable Umwandlung von String in Float/Double und Rückwärts geschrieben werden. Selbst die verwendete De-facto-Standarddarstellung der Zahlen erlaubt im allgemeinen keine dezimalen oder binären reversiblen Konvertierungen. Zur Veranschaulichung: Versuchen Sie, 1/3 in Dezimalschreibweise und zurück zu konvertieren, wobei Genauigkeit erhalten bleibt. –

Antwort

0
float f; 
cin >> f; 
cout << f; 
+0

Aber mit Doppel 12345.56789 funktioniert die gleiche Vorgehensweise nicht. doppelt d; cin >> d; cout << d; –

0

Verwendung setprecision.

Hier ist die Lösung

cout<<setprecision(the precision you want to set here)<<variablename; 

zB. Wenn Sie Genauigkeit der Ausgabe 5 für variable var verwenden es so einstellen wollen:

cout<<setprecision(5)<<var; 

setprecision ein Manipulator ist. Erfahren Sie mehr über Manipulatoren here.

es die Dezimalgenauigkeit Sets

Format Gleitkommawerte auf Ausgabeoperationen verwendet werden. Benimmt sich, als ob die Elementpräzision mit n als Argument auf dem -Stream aufgerufen würde, auf dem es als Manipulator eingefügt/extrahiert wird (es kann in Eingabeströme oder Ausgabeströme eingefügt/extrahiert werden).

Dies ist ein Manipulator und wird in Header <iomanip>

0

Da der Eingang hat eine unbekannte Präzision, die einfachste Methode deklariert ist, sie als Zeichenfolgen zu lesen, nicht verdoppelt/schwimmt.

Wenn Sie den Float-Wert benötigen, ist eine einfache Umwandlung von String in Double erforderlich.

Jede andere Methode wird wahrscheinlich fehlschlagen, da Sie sich auf eine unvollständige Konvertierung von String zu Float verlassen, die von der Standardbibliothek ausgeführt wird.

Letzteres kann nicht zwischen 0,4 und 0,40 unterscheiden.