Округление в C++ довольно часто требуется для выполнения различных задач. Существует большое количество вариантов округления, в зависимости от необходимого значения. Как и большинство мат. операций, они находятся в библиотеке <cmath>, а также более старой библиотеке <math.h>.
Самые распространенные – это функции round(), ceil(), floor() и trunc(). Если первая выполняет математически правильное округление, то есть к ближайшему целому, а 0,5 к более дальнему от 0, то ceil() округляет в сторону большего, а floor() - в сторону меньшего. Последняя функция trunc() скорее не округление, а простое отбрасывание дробной части. Продемонстрируем на примере:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						void main( void ) {    double y;    y = floor( 2.8 );    printf( " floor %f\n", y );    y = ceil ( 2.1 );    printf( " ceil %f\n", y );    y = round ( 2.6 );    printf( " round %f\n", y );    y = trunc ( 2.9 );    printf( " trunc %f\n", y ); }  | 
					
Программа выведет значения 2, 3, 3 и 2.
Для случая, когда надо округлить число до определенного знака, в библиотеке <math.h> отдельной функции нет, потому обычно используют умножение числа и последующее после округления деление, то есть, например, для округления до сотых:
| 
					 1  | 
						y=floor( 2.463*100 )/100;  | 
					
Получим значение 2.46.
Стоит отметить также, что в старых компиляторах C++ функция round не доступна и её приходится писать самостоятельно:
| 
					 1 2 3 4  | 
						double round(double x) {   return floor(x + 0.5); }  | 
					

Чем отличается floor() и trunc()?
Они по-разному работают с отрицательными числами: floor(-2.5)=-3, trunc(-2.5)=-2.
Есть ли какая-то функция округления, работающая почти, как round(), но 0.5 округляет к меньшему?
Слишком неопределённая хотелка. Ответ - есть. В крайнем случае можете написать свою.
round(x + 0.5) - подойдёт ?