Подтвердить что ты не робот

Где Round() в С++?

Дубликат: round() для float в С++


Я использую VS2008, и я включил math.h, но я все еще не могу найти круглую функцию. Он существует?

Я вижу кучу "добавить 0.5 и бросить в int" в google. Это лучшая практика?

4b9b3361

Ответ 1

Вы можете использовать С++ 11 std::round().

Если вы все еще придерживаетесь более старых стандартов, вы можете использовать std::floor(), который всегда округляется до более низкого значения, а std::ceil(), который всегда округляется до большего числа.

Чтобы получить нормальное поведение округления, вы действительно используете floor(i + 0.5).

Этот способ даст вам проблемы с отрицательными числами, обходным путем для этой проблемы является использование ceil() для отрицательных чисел:

double round(double number)
{
    return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5);
}

Другим, более чистым, но ресурсоемким способом является использование строкового потока и манипуляторов ввода/вывода:

#include <iostream>
#include <sstream>

double round(double val, int precision)
{
    std::stringstream s;
    s << std::setprecision(precision) << std::setiosflags(std::ios_base::fixed) << val;
    s >> val;
    return val;
}

Используйте только второй подход, если у вас мало ресурсов и/или необходимо контролировать точность.

Ответ 2

Использование floor(num + 0.5) не будет работать для отрицательных чисел. В этом случае вам нужно использовать ceil(num - 0.5).

double roundToNearest(double num) {
    return (num > 0.0) ? floor(num + 0.5) : ceil(num - 0.5);
}

Ответ 3

На самом деле в Microsoft math.h отсутствует круговая функция.
Однако вместо этого вы можете использовать статический метод Math:: Round().
(В зависимости от типа вашего проекта.)

Ответ 4

Я не знаю, подходит ли это практике или нет, но с использованием метода 0,5 с полом() кажется, что это путь.