当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《C++中的Round()在哪里?》经验,为你挑选了2个好方法。

你可以使用C++ 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 
#include 

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> Patrick Glan..:

你可以使用C++ 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 
#include 

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

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


您认为转换为字符串并返回更清洁*吗?
还需要包括(使用MSVC 2012)来使用round函数.

2> Bill the Liz..:

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

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

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有