Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Zaokrouhlování

Aktivity
Avatar
Jan Michálek:9.10.2018 14:38

Zdravím,

potřebuji poradit. Mám úkol do školy, kde při výběru od uživatele a zadáním vstupní hodnoty (nebo hodnot) se vypočítá obsah a obvod čtverce, obdelníku, kruhu. Všechno jsem si napsal, ale potřebuji mít výsledek se 4 desetinnými místy ale za nic na to nemůžu přijít jak se to dělá. Mohl by mi někdo prosím poradit?

#include <iostream>
#include <cmath>
#define _USE_MATH_DEFINES

using namespace std;

int main()
{
    cout << "Zadejte rovinny obrazec, jehoz obsah a obvod chcete spocitat: a - ctverec, b - obdelnik, c - kruh" << endl;
    char vstup;
    cin >> vstup;
    if (vstup == 'a'){
        cout << "Zadejte stranu ctverce:" << endl;
        double StranaCtverce;
        cin >> StranaCtverce;
        if (StranaCtverce > 0){
            cout << "Obsah ctverce je: " << StranaCtverce*StranaCtverce << endl;
            cout << "Obvod ctverce je: " << 4*StranaCtverce << endl;
        }
        else {
            cout << "Nespravny vstup." << endl;
        }
    }
    if (vstup == 'b'){
        cout << "Zadejte strany obdelniku:" << endl;
        double StranaObdelniku1, StranaObdelniku2;
        cin >> StranaObdelniku1 >> StranaObdelniku2;
        cout << "Obsah obdelniku je: " << StranaObdelniku1*StranaObdelniku2 << endl;
        cout << "Obvod obdelniku je: " << 2 * (StranaObdelniku1+StranaObdelniku2) << endl;
    }
    if (vstup == 'c'){
        cout << "Zadejte polomer kruznice:" << endl;
        double PolomerKruznice;
        cin >> PolomerKruznice;
        cout << "Obsah kruznice je: " << M_PI * (PolomerKruznice*PolomerKruznice) << endl;
        cout << "Obvod kruznice je: " << 2*M_PI*PolomerKruznice << endl;
    }
    if (vstup != 'a' && vstup != 'b' && vstup != 'c') {
        cout << "Nespravny vstup." << endl;
    }
    return 0;
}

Zkusil jsem: Google.

Odpovědět
9.10.2018 14:38
Nemá cenu nic programovat, pokud se to neprogramuje geniálně.
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Jan Michálek
Martin Dráb:9.10.2018 14:51

Co toto?

x = round(x*10000) / 10000;

Trik je v tom, že tebou požadovaná desetinná místa se stanou součástí celé části čísla, takže funkce round vlastně ovlivní pouze čtvrté des. místo v závislosti na pátém (které je po vynásobení 10000 vlastně první). Po zaokrouhlení vydělíš 10000, abys desetinná místa vrátil tam, kam patří.

Vzhledem k interní reprezentaci double a spol (IEEE 754) se pořád můžeš dostat do problémů se zaokrouhlováním, ale to proto, že tebou požadované číslo nelze interně reprezentovat přesně. Bohužel, taková běžná čísla jako 0.2 prostě ve dvojkové soustavě nezapíšeš, ledaže bys měl nekonečně velký papír.

Nahoru Odpovědět
9.10.2018 14:51
2 + 2 = 5 for extremely large values of 2
Avatar
Jan Michálek:9.10.2018 15:34

Tak nakonec jsem použil funkci setprecision ()

vložil jsem funkci hned pod vstup uživatele cout << setprecision (4) <<fixed;

A šlape to jak má. ;-)

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
9.10.2018 15:34
Nemá cenu nic programovat, pokud se to neprogramuje geniálně.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.