Russian Qt Forum

Компиляторы и платформы => Visual C++ => Тема начата: Karl-Philipp от Апрель 12, 2008, 08:23



Название: в заголовке <cmath> отсутствует round
Отправлено: Karl-Philipp от Апрель 12, 2008, 08:23
Здравствуйте,

искал функцию для возврата аргумента, округленного до ближайшего целого числа. Нашел в справочнике Г.Шилдта по С функции round(), roundf(), roundl().
вписал заголовочный файл <math.h>, использую в программе
Цитировать
float roundf(float arg);
а в ответ:

Цитировать
error C2065: 'roundf' : undeclared identifier

VS 7.0
Получается нет такой функции в <math.h>

открыл справочник по С++. Нашел функции floor() и сeil(). Первая из них округляет в сторону большего числа, вторая - в сторону меньшего... Функции round() в справочнике по С++ не нашел :(

Подскажите, пожалуйста, что можно вместо round использовать?


Название: Re: в заголовке <cmath> отсутствует round
Отправлено: Sancho_s_rancho от Апрель 12, 2008, 20:30
floor(x+0.5) - в самом простом случае(для положительных ч).
А так - в гугл


Название: Re: в заголовке <cmath> отсутствует round
Отправлено: Karl-Philipp от Апрель 12, 2008, 21:02
floor(x+0.5) - в самом простом случае(для положительных ч).
А так - в гугл

хм... а что же нам даст добавление 0,5?
толку то с того, все равно будет округлять в сторону большего числа.

Гуглил - не нашел.
Странно то, что раунда нет в с++ Почему ???


Название: Re: в заголовке <cmath> отсутствует round
Отправлено: Karl-Philipp от Апрель 13, 2008, 12:58
плохо искал  :-[
Санчо, Вы таки правы :) спасибо большое

Цитировать
double fRoundVal = floor(floatVal1 + 0.5);
int iRoundVal = floatVal1 + 0.5;

работает


Название: Re: в заголовке <cmath> отсутствует round
Отправлено: Tonal от Апрель 14, 2008, 07:31
Код:
#include <iostream>

template <class Int, class Float>
Int RoundTo(Float val) {
  return static_cast<Int>(val >= 0 ? val + .5 : val - .5);
}

int main() {
  std::cout<<RoundTo<int>(-3.6)<<std::endl;
}


Название: Re: в заголовке <cmath> отсутствует round
Отправлено: Karl-Philipp от Апрель 14, 2008, 08:29
спасибо огромнейшее :)