你如何使用VisualDSP ++对C中的浮点数进行舍入?

时间:2013-06-19 18:33:32

标签: c

大多数C编译器都提供标准C库的一些变体。 VisualDSP ++编译器也不例外。但是,我最近遇到了一个场景,我需要取一个float值,将其四舍五入到最接近的整数,然后将其转换为int

使用C的大多数变体相当容易,但在尝试使用roundf后,我发现math.h不包含roundf函数。

如何使用VisualDSP ++将float变量正确舍入到最接近的int值?

2 个答案:

答案 0 :(得分:4)

我不熟悉VisualDSP,但您可以将浮点数舍入为整数:

float number = 3.14;
int rounded = (int)(number + (number > 0 ? 1 : -1) * 0.5);

所以,你可以为此编写自己的函数:

int roundFloatToInt(float number)
{
    return (int)(number + (number > 0 ? 1 : -1) * 0.5);
}

以上为给定输入输出以下内容:

roundFloatToInt(0.10) --> 0

roundFloatToInt(3.14) --> 3

roundFloatToInt(3.54) --> 4

它似乎适用于我测试的所有案例,包括否定。

答案 1 :(得分:1)

我记得,*f()函数(包括roundf)添加了1999版ISO C标准,以及roundd函数。 }}第

你的long double声明<math.h>可能可能,它在round而不是double上运行。 (C90实际上没有floatroundroundf,但您的实现可能提供roundl作为扩展名。) (编辑:不,它没有。)

未经测试的代码如下:

round

float x = 123.456; int n = round(x); 需要round个参数;传递给它的double参数将被隐式转换。然后,float结果会隐式转换为double

可以通过添加强制转换来显示所有转化:

int

但那只是一团糟。

编辑:C89 / C90确实定义了int n = (int)round((double)x); floor函数。如果ceil不可用,则根据round来定义它应该不难。细节取决于你想要做什么样的舍入。