Es gibt auch std::fesetround
von <cfenv>
, die die Rundung Richtung setzt:
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cfenv>
int main() {
double runtime = 0.756247615801;
// Set rounding direction and output with some precision:
const auto prev_round = std::fegetround();
std::fesetround(FE_DOWNWARD);
std::cout << "desired: " << std::setprecision(6) << runtime << "\n";
// Restore previous rounding direction and output for testing:
std::fesetround(prev_round);
std::cout << "default: " << std::setprecision(6) << runtime << "\n";
}
(beachten Sie, dass diese nicht die Art von Bemerkungen Ich empfehle, sie sind nur für Nachhilfe Zwecke)
Ausgang:
desired: 0.756247
default: 0.756248
Wichtiger Hinweis, t hough: Ich fand keine Erwähnung in der Norm, dass die operator<<
Überladungen für Floating-Typen haben, um die Rundungsrichtung zu beachten.
Die einzige 100% korrekte Lösung bisher, unter der Annahme einer Qualitätsimplementierung, wo die Funktionen zur Dezimalzählung den Rundungsmodus berücksichtigen. –
@PascalCuoq: Ich habe den Teil mit dem Namen 'Wichtiger Hinweis, obwohl' –
hinzugefügt @phreshel' fesetround' gibt "Zero, wenn die angeforderte Rundungsrichtung wurde erfolgreich festgelegt. Andernfalls, ein Wert ungleich Null": http: // www. cplusplus.com/reference/cfenv/fesetround/#return Ich glaube, du wolltest verwenden: ['fegetround'] (Ich habe mir die Freiheit genommen, deine Antwort zu bearbeiten) . Fühlen Sie sich frei, Rollback, wenn meine Bearbeitung keinen Sinn ergibt. –