C++ round

27. 1. 2008 Aktualizováno: Někdo mě emailem upozornil (za což děkuji), že moje řešení funguje pouze pro kladná čísla. Zde je řešení, které nabízí on (mírně upravené, aby fungovalo po pouhém Cut&Paste :-) ):

#include <cmath>
int function round(double num) {
  char sign = static_cast<char>(num/fabs(num));
  return static_cast<int>(sign* (fabs(num)+ 0.5));
}

Původně jsem zde vlastně měl funkci, která také fungovala dobře jak pro kladná, tak pro záporná čísla:

#include <cmath>
int function round(double num) {
  return static_cast<int>(floor(num+0.5));
}

Nedá mi to a musím o tom napsat. C++ je jazyk, který moc v oblibě nemám a dost mě štve (hlavně teď, když musím programovat závěrečný příklad do kurzu C++ a potřeboval bych dělat úplně jiné věci).

Nejvíc mě asi štve, jak dlouho mi trvá, než najdu řešení nějaké chyby. Už už jsem se teď chtěl znova naštvat, jak je to C++ pitomé, že ani nemá zadefinovanou funkci round pro zaokrouhlení desetinného čísla na celé (pěkně od pěti desetin nahoru, jinak dolu), když mi google poradil parádní fintu. Stačí přičíst 0.5 a a vzít nejbližší nižší celé číslo (čili floor, které v C++ existuje).

Céčková funkce potom vypadá takto triviálně:

int round(double num) {
 return (int)(num+0.5);
}

Jsem asi z řady těch hloupějších a pohodlnějších programátorů a vůbec by mi nevadilo, kdyby taková funkce byla také zahrnuta v knihovně (nejlépe i s možností nastavení přesnosti zaokrouhlování). Takové funkce podle mě k modernímu jazyku patří.

Toto považuji jako mnohem lepší komfort pro programátora.

Tags:

2 Responses to “C++ round”

  1. kamil napsal:

    a co tak pouzit modifikatori vystupneho prudu ???
    cout << fixed << setprecision (0) << a;

    zaokruhli ti na cele cislo …

  2. Blc napsal:

    double ceil (double x); /* Zaokrouhlí argument na nejmenší vyšší celé číslo. */

Leave a Reply