Существует ли путь к раунду к ближайшему числу в библиотеке Boost? Я имею в виду любое число, 2's, 5's, 17 и т. д. и т. п.
Или есть ли другой способ сделать это?
int nearest = 5;
int result = (input+nearest/2)/nearest*nearest;
Вам вообще не нужен Boost, только библиотека C, включенная в библиотеку C ++. В частности, вам необходимо включить заголовок cmath:
Округлить число: ceil (): http://www.cplusplus.com/reference/clibrary/cmath/ceil/
Округлить число в меньшую сторону : floor (): 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;
}
Вы можете использовать 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.