四舍五入到 C++ 中最接近的数字使用升压?

发布于 2024-09-10 16:10:44 字数 76 浏览 4 评论 0原文

有没有办法四舍五入到 Boost 库中最接近的数字?我的意思是任何数字,2、5、17 等等。

或者还有其他方法可以做到吗?

Is there a way to round to the nearest number in the Boost library? I mean any number, 2's, 5's, 17's and so on and so forth.

Or is there another way to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

执笔绘流年 2024-09-17 16:10:45
int nearest = 5;
int result = (input+nearest/2)/nearest*nearest;
int nearest = 5;
int result = (input+nearest/2)/nearest*nearest;
似最初 2024-09-17 16:10:45

实际上你根本不需要Boost,只需要C++库中包含的C库即可。具体来说,您需要包含 cmath 标头:

Round up a number: ceil(): http://www.cplusplus.com/reference/clibrary/cmath/ceil/

向下舍入一个数字:floor(): http://www.cplusplus.com/reference/clibrary/cmath/floor/

您可以编写自己的圆形函数:

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
#include <utility>

double roundFloat(double x)
{
    double base = floor( x );

    if ( x > ( base + 0.5 ) )
            return ceil( x );
    else    return base;
}

int main()
{
    std::string strInput;
    double input;

    printf( "Type a number: " );
    std::getline( std::cin, strInput );
    input = std::atof( strInput.c_str() );

    printf( "\nRounded value is: %7.2f\n", roundFloat( input ) );

    return EXIT_SUCCESS;
}

You actually don't need Boost at all, just the C library included in the C++ library. Specifically, you need to include the cmath header:

Round up a number: ceil(): http://www.cplusplus.com/reference/clibrary/cmath/ceil/

Round down a number: floor(): http://www.cplusplus.com/reference/clibrary/cmath/floor/

You can write your own round function then:

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
#include <utility>

double roundFloat(double x)
{
    double base = floor( x );

    if ( x > ( base + 0.5 ) )
            return ceil( x );
    else    return base;
}

int main()
{
    std::string strInput;
    double input;

    printf( "Type a number: " );
    std::getline( std::cin, strInput );
    input = std::atof( strInput.c_str() );

    printf( "\nRounded value is: %7.2f\n", roundFloat( input ) );

    return EXIT_SUCCESS;
}
天生の放荡 2024-09-17 16:10:44

您可以使用 C99 中提供的 lround

#include <cmath>
#include <iostream>

int main() {
  cout << lround(1.4) << "\n";
  cout << lround(1.5) << "\n";
  cout << lround(1.6) << "\n";
}

(输出 1、2、2)。

检查您的编译器文档是否需要启用 C99 支持和/或如何启用 C99 支持。

You can use lround available in C99.

#include <cmath>
#include <iostream>

int main() {
  cout << lround(1.4) << "\n";
  cout << lround(1.5) << "\n";
  cout << lround(1.6) << "\n";
}

(outputs 1, 2, 2).

Check your compiler documentation if and/or how you need to enable C99 support.

追星践月 2024-09-17 16:10:44

Boost 舍入函数

例如:

#include <boost/math/special_functions/round.hpp>
#include <iostream>
#include <ostream>
using namespace std;

int main()
{
    using boost::math::lround;
    cout << lround(0.0) << endl;
    cout << lround(0.4) << endl;
    cout << lround(0.5) << endl;
    cout << lround(0.6) << endl;
    cout << lround(-0.4) << endl;
    cout << lround(-0.5) << endl;
    cout << lround(-0.6) << endl;
}

输出为:

0
0
1
1
0
-1
-1

Boost Rounding Functions

For example:

#include <boost/math/special_functions/round.hpp>
#include <iostream>
#include <ostream>
using namespace std;

int main()
{
    using boost::math::lround;
    cout << lround(0.0) << endl;
    cout << lround(0.4) << endl;
    cout << lround(0.5) << endl;
    cout << lround(0.6) << endl;
    cout << lround(-0.4) << endl;
    cout << lround(-0.5) << endl;
    cout << lround(-0.6) << endl;
}

Output is:

0
0
1
1
0
-1
-1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文