Wie kann ich in C++ abrunden ohne eine Funktion zu benutzen?

3 Antworten

Also ganz primitiv und ohne Fehlerprüfung:

#include <iostream> // cout, endl

#include <cstdlib> // size_t

int main (void) {
    using namespace ::std;
    
    cout << "Enter floating point number: " << flush;
    double fp {};
    cin >> fp;

    cout << "Enter decimal places: " << flush;
    size_t dp {};
    cin >> dp;

    size_t factor { 1ul };
    while (dp--) {
        factor *= 10;
    }

    const auto multiplied { static_cast<size_t>(fp * factor) };
    
    const auto before { multiplied / factor };
    const auto after { multiplied % factor };

    cout << "Rounded: " << before << "." << after << endl;
}

Ich habe absichtlich nicht den naiven Weg gewählt, weil man dabei gleitkomma-bedingte Rundungsfehler bekommen wird.

Und im obigen Codeschnipsel wird nicht auf Plausibilität und Fehler geprüft. (negative Eingabe, 0 als Dezimalstellen, etc.)

Ach und, du brauchst dafür einen modernen Compiler, der C++17 kennt, da ich die moderne Art der Initialisierung verwende. Falls du das nicht magst, kannst du es ja auch noch anpassen.

Woher ich das weiß:Berufserfahrung

Du könntest die Zahl in einen String verwandeln, ab hier sollte der Weg klar sein.

Du könntest Di Zahl mit 10^Stellen multiplizieren, einen Integralcast machen und dann wieder dividieren.

Ggf. gibt es noch weitere Möglichkeiten.

Du kannst die Eingabe in einzelne Zeichen/Chars zerlegen, und diese dann verändern wenn gerundet werden muss

Woher ich das weiß:Berufserfahrung – Anwendungsentwickler
Carina420 
Fragesteller
 31.10.2020, 12:52

Wie zerlege ich die denn? Das ist vielleicht einfacher als die Multiplikation (wie in der vorher genannten Antwort) ggf mehrmals durchzuführen

0