2017-11-19 4 views
0
cout << setprecision (2) << fixed; 
cin>>R; 
cout<<R; 

Nun, wenn ich R gesetzt = 2,3456, das gibt mir 2,34. Aber in Berechnung R arbeitet als 2,3456 wenn ich diese Zahl als Eingabe nehme. Aber ich möchte 2,34 als Eingabe nach dem Ausführen von Präzision nehmen. Wie mache ich das?Wie nehme ich einen präzisierten Wert als Eingabe?

+0

Ihre Präzision wirkt auf den Ausgang, nicht eingegeben. Deshalb ist der Wert immer noch in "voller" Präzision vorhanden. – Yunnosch

+0

Du könntest mit 100 multiplizieren, es unterteilen, durch 100 dividieren und dann weitermachen, aber sei gewarnt vor https://stackoverflow.com/questions/588004/is-floating-point-math-broken – Yunnosch

Antwort

1

Es gibt keine Möglichkeit, Eingaben mit einer bestimmten Genauigkeit vorzunehmen. Stuffs wie std::setprecision funktioniert nur auf Ausgabeströmen. Sie können zusätzliche Genauigkeit durch Runden manuell "abschneiden".

Dies ist ein Beispiel:

double a; 
std::cin >> a; 
a = std::round(a * 100.0)/100.0; 

dass decimal floating points may not be represented percisely in computers ware sein.

+0

Ich bekomme es jetzt :) ty –

+0

@shayer, wenn eine Antwort Ihr Problem löst, geben Sie ein Häkchen anstelle eines Kommentars. – Yakk

1

Ich denke, die allgemeinere Methode wäre:

#include <math.h> 

double roundTo(double inNumber, int n) { 
    double nn = pow(10, n); 
    // static_cast<dest_type> is more modern and standard way .. 
    return static_cast<double>(static_cast<long long>(inNumber * nn)/nn); 
} 
+0

Das 'lange' ist schlecht. – iBug

+0

warum? @iBug versucht, Datenverlust zu vermeiden – nullqube

+0

Sie scheitern sicherlich mit '1.0e10' (oder' 1.0e20', mit 'long long'), was offensichtlich im Bereich von' double' liegt. – iBug

Verwandte Themen