C ++中的Round()在哪里?

时间:2009-02-16 19:01:57

标签: c++ rounding

重复:round() for float in C++


我正在使用VS2008并且我已经包含math.h但我仍然找不到圆函数。它存在吗?

我在google上看到一堆“添加0.5并转换为int”解决方案。这是最好的做法吗?

4 个答案:

答案 0 :(得分:63)

您可以使用C ++ 11的std::round()

如果您仍然坚持使用较旧的标准,则可以使用std::floor()std::ceil()总是向下舍入到较低的数字,{{3}},它总是向更高的数字舍入。

要获得正常的舍入行为,您确实会使用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;
}

如果资源不足和/或需要控制精度,则只使用第二种方法。

答案 1 :(得分:15)

使用floor(num + 0.5)不适用于负数。在这种情况下,您需要使用ceil(num - 0.5)

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

答案 2 :(得分:3)

Microsoft math.h中实际上没有圆函数 但是,您可以使用静态方法Math :: Round()代替 (取决于您的项目类型。)

答案 3 :(得分:0)

我不知道这是不是最好的做法,但是使用带有地板()的0.5技术似乎是要走的路。