代码之家  ›  专栏  ›  技术社区  ›  Indeed is Trash

C++中的圆()在哪里?[副本]

  •  38
  • Indeed is Trash  · 技术社区  · 17 年前

    副本: round() for float in C++


    我使用的是VS2008,其中包含了math.h,但仍然找不到一个圆函数。它存在吗?

    我在谷歌上看到了很多“添加0.5并转换为int”的解决方案。这是最好的做法吗?

    4 回复  |  直到 6 年前
        1
  •  63
  •   Patrick Glandien    12 年前

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

    std::floor() ,始终舍入到较低的数字,以及 std::ceil() ,它总是四舍五入到更高的数字。

    floor(i + 0.5) .

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

    另一种更干净但资源更密集的方法是使用stringstream和输入/输出操纵器:

    #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
  •  15
  •   Bill the Lizard    17 年前

    使用 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
  •  3
  •   Sani Huttunen    17 年前

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

        4
  •  0
  •   Elroy    17 年前