如果第一个小数大于或等于5,如何+1到数字?

时间:2013-10-07 16:47:19

标签: c++ math floating-point rounding

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

例如:

#include <iostream>
using namespace std;

int main()
{
    float num = 0.5222f;

    cout << (int)num << endl;

    cin.get();
    return 0;
}

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

5 个答案:

答案 0 :(得分:4)

如果要将此值舍入为最接近的整数,则可以在将其转换为int之前添加0.5

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

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

double      round  (double x);
float       roundf (float x);
long double roundl (long double x);

答案 1 :(得分:3)

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

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

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

std::cout << floor(num + 0.5) << std::endl;

答案 2 :(得分:1)

如果你将float转换为int,它会向零舍入,删除该数字的小数部分。

您要做的是先致电roundf。 (round表示双倍,roundf表示浮动)

cout << (int)roundf(num) << endl;

答案 3 :(得分:0)

我只想补充一下:

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

通过这种方式你甚至可以决定如果(比如说)第一个数字是&gt; 3

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

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

答案 4 :(得分:-2)

尝试ceil功能。 它将0.5到整数十进制数的数字加1。

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