23 Stimmen

Begrenzung der Ziffern ab dem Dezimalpunkt in C++

Ich bin neu in C++. Ich habe eine Double-Variable double a=0.1239857 und ich möchte die Variable a vom Dezimalpunkt aus zwei Ziffern. Also a wird sein 0.12 . Ich weiß, dass C++ Funktionen hat, die die größte oder kleinste ganze Zahl zurückgeben, die größer oder kleiner ist als a wie Decke oder Boden.

Gibt es eine Funktion, die die Ziffernbegrenzung von Fließkomma-Variablen implementiert? Oder wie kann ich die Genauigkeit der a variabel?

1 Stimmen

Die Verwendung von std::fixed, wie in dieser Antwort gezeigt, würde zu dem erforderlichen Format führen stackoverflow.com/questions/5907031/

25voto

Alnitak Punkte 324207

Versuchen Sie tatsächlich, die Zahl zu runden oder nur die angezeigte Genauigkeit zu ändern?

Für die erste Variante (Abschneiden der zusätzlichen Ziffern):

double scale = 0.01;  // i.e. round to nearest one-hundreth
value = (int)(value / scale) * scale;

oder (Auf- bzw. Abrunden, wie in der Antwort von jheriko beschrieben)

double scale = 0.01;  // i.e. round to nearest one-hundreth
value = floor(value / scale + 0.5) * scale;

Für letztere:

cout << setprecision(2) << value;

wobei der Parameter für setprecision() ist die maximale Anzahl der Ziffern, die nach dem Dezimalpunkt angezeigt werden.

2 Stimmen

Beachten Sie, dass bei der Verwendung von setprecision für einen Stream, wie Sie zeigen, auch gerundet wird.

0 Stimmen

Brian - bitte erläutern Sie das. Sicher, es wird anzeigen den Wert auf die entsprechende Anzahl von Stellen auf- oder abgerundet, aber es ändert nicht den tatsächlich in der Variablen gespeicherten Wert.

0 Stimmen

Der Wert wird bei der Ausgabe in cout auf die entsprechende Genauigkeit gerundet. Dies hat natürlich keine Auswirkungen auf den Wert in der Variablen.

9voto

bradtgmurray Punkte 12945

Das Ergebnis sind zwei Stellen nach dem Komma.

a = floor(a * 100.0) / 100.0;

0 Stimmen

Obwohl von OP nicht gefragt: Beachten Sie, dass beim Drucken a es ist nicht garantiert, dass nur 2 Ziffern angezeigt werden. Es wird Rundungsfehler geben.

4voto

schnaader Punkte 47961

Wenn Sie nur den Wert ausgeben wollen, können Sie etwa so vorgehen

printf("%.3f", a); // Output value with 3 digits after comma

Wenn Sie den Wert selbst umrechnen wollen, können Sie das tun:

a = (int)(a * 1000) / 1000.0f;

Beachten Sie, dass beide keine Rundung vornehmen, sondern den Wert nur abschneiden.

3voto

David Cournapeau Punkte 74679

Was meinen Sie damit, dass Sie die Variable begrenzen wollen? Den Wert oder seine Formatierung. Für den Wert können Sie floor + Division verwenden. Etwa so:

double a = 0.12123
double b;

b = floor(a * 100) / 100

1voto

dirkgently Punkte 104289

Verwenden Sie eine ios_base::precision für die Formatierung der E/A.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X