0

我的目标是当第一个小数位大于或等于 5 时,将值添加到小数点前。

例如:

#include <iostream>
using namespace std;

int main()
{
    float num = 0.5222f;

    cout << (int)num << endl;

    cin.get();
    return 0;
}

我的预期结果是 1 而不是 0。我应该如何修改代码以获得预期结果?

4

5 回答 5

4

如果您想将此值四舍五入为最接近的整数,您可以在将0.5其转换为 int 之前添加:

float num = 0.5222f;
cout << (int)(num + 0.5);

或者,您可以使用<cmath>标题中的以下功能之一:

double      round  (double x);
float       roundf (float x);
long double roundl (long double x);
于 2013-10-07T16:49:19.450 回答
3

C++11中,我们现在有了std::round,所以这可以正常工作:

std::cout << std::round(num) << std::endl;

还需要包括<cmath>. 使用floor的非C++11方法:

std::cout << floor(num + 0.5) << std::endl;
于 2013-10-07T16:52:30.333 回答
1

如果您将 afloat转换为 an int,它会向零舍入,删除数字的小数部分。

你要做的就是roundf先打电话。(round对于双,roundf对于浮动)

cout << (int)roundf(num) << endl;
于 2013-10-07T16:49:47.900 回答
0

我只是补充:

float num = 0.5222f;
cout << std::floor(num + 0.5);

这样,如果(例如)第一个数字> 3,您甚至可以决定四舍五入

float num = 0.3222f;
cout << std::floor(num + 0.7);

不知道有多大用处,但是....你可以!

于 2013-10-07T16:58:17.410 回答
-2

试试 ceil 函数。它将 0.5 的数字四舍五入到十进制整数加 1。

http://en.cppreference.com/w/cpp/numeric/math/ceil

于 2013-10-07T16:50:35.377 回答