Округление до ближайшего числа в C ++ с использованием Boost? - PullRequest
5 голосов
/ 18 июля 2010

Есть ли способ округлить до ближайшего числа в библиотеке Boost?Я имею в виду любое число, 2, 5, 17 и т. Д. И т. Д.

Или есть другой способ сделать это?

Ответы [ 4 ]

5 голосов
/ 18 июля 2010

Вы можете использовать lround доступно в C99.

#include <cmath>
#include <iostream>

int main() {
  cout << lround(1.4) << "\n";
  cout << lround(1.5) << "\n";
  cout << lround(1.6) << "\n";
}

(выходы 1, 2, 2).

Проверьте документацию компилятора, если и / или как вам нужно включить поддержку C99.

3 голосов
/ 25 октября 2012

Функции округления при повышении

Например:

#include <boost/math/special_functions/round.hpp>
#include <iostream>
#include <ostream>
using namespace std;

int main()
{
    using boost::math::lround;
    cout << lround(0.0) << endl;
    cout << lround(0.4) << endl;
    cout << lround(0.5) << endl;
    cout << lround(0.6) << endl;
    cout << lround(-0.4) << endl;
    cout << lround(-0.5) << endl;
    cout << lround(-0.6) << endl;
}

Вывод:

0
0
1
1
0
-1
-1
3 голосов
/ 18 июля 2010
int nearest = 5;
int result = (input+nearest/2)/nearest*nearest;
0 голосов
/ 18 июля 2010

На самом деле вам вообще не нужен Boost, только библиотека C, включенная в библиотеку C ++. В частности, вам нужно включить заголовок cmath:

Округлить число: ceil (): http://www.cplusplus.com/reference/clibrary/cmath/ceil/

Округлить число: этаж (): http://www.cplusplus.com/reference/clibrary/cmath/floor/

Вы можете написать свою собственную функцию округления:

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
#include <utility>

double roundFloat(double x)
{
    double base = floor( x );

    if ( x > ( base + 0.5 ) )
            return ceil( x );
    else    return base;
}

int main()
{
    std::string strInput;
    double input;

    printf( "Type a number: " );
    std::getline( std::cin, strInput );
    input = std::atof( strInput.c_str() );

    printf( "\nRounded value is: %7.2f\n", roundFloat( input ) );

    return EXIT_SUCCESS;
}
...