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/

1voto

Brian Neal Punkte 30564

Sie können die Genauigkeit für einen Stream festlegen, z. B.

double d = 3.14579;
cout.precision(2);
cout << d << endl;

// Or use a manipulator

#include <iomanip>
cout << setprecision(2) << d << endl;

Wenn Sie einen Double oder Float an einen solchen Stream senden, wird dieser automatisch gerundet (was Sie manchmal in Schwierigkeiten bringen kann, wenn Sie sich dessen nicht bewusst sind).

1voto

jheriko Punkte 2968

Eine tatsächliche Rundungslösung würde lauten x = floor(100*x + 0.5) / 100; unter der Annahme, dass sich der zu rundende Wert in einer Variablen "x" befindet.

El x = floor(100*x) / 100; die von anderen hier empfohlen wurde, wird die Zahl stattdessen auf 2dp abgeschnitten.

0 Stimmen

Ich konnte nicht verstehen, dass linefloor(100*x + 0.5) / 100

1voto

Joe Schmoe Punkte 11

Sie könnten auch so vorgehen:

//This code will ask the user for an input, set the decimal precision to the hundredths place,  and add 4.63 to the inputted variable

int banana;
cin >> banana;
cout << setprecision(2) << fixed << banana + 4.63;

0voto

Sie können Ihre eigene Funktion wie folgt schreiben, sie kann auch Rundungsfehler für Dezimalzahlen behandeln.

double RoundForGivenPrecision(const double dNumber, int iDecimalPlaces)
{
long long multiplier = (long long)pow(10, iDecimalPlaces);
long double value = dNumber < 0 ? (long long)((nextafter(dNumber, -DBL_MAX)*multiplier)-0.5) : (long long)((nextafter(dNumber,DBL_MAX)*multiplier)+0.5);
return value / multiplier;
}

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