C:(int)x和floor(x)之间的差异?

时间:2010-04-08 23:57:21

标签: c floating-point

在C中,这两者之间有什么区别?

float myF = 5.6;

printf( "%i \n", (int)myF ); // gives me "5"
printf( "%ld \n", floor(myF) ); // also "5"?

何时优先于另一个?

5 个答案:

答案 0 :(得分:29)

一个很大的区别是负数;如果您将myF更改为-5.6,则转换为int会返回-5floor(myF)-6

至于哪个更可取,根据经验,如果你知道这就是你需要的东西,我会说只投出一个int - 而且既然你在这里问,那么很有可能你可能想要floor

(另请注意,对于printf格式,%ld是一个长整数;双精度是%lf。)

答案 1 :(得分:5)

floor(n)返回n的数学底限,即不大于n的最大整数。 (int)n返回n的截断,绝对值的整数不大于n的整数。同样,ceil(n)返回n的数学上限,或不小于n的最小整数。正如AraK指出的那样,floor()ceil()返回的数字可能不在int的范围内。

答案 2 :(得分:3)

当你获得floor的双倍时,“整数”doubleint类型的变量中可以表示或不表示。

答案 3 :(得分:1)

前者将您的浮点值转换为整数(并且您在printf调用中使用了int说明符)。

后者使用floor(来自C math lib)返回已向下舍入的double。

答案 4 :(得分:0)

您希望结果为整数还是双精度?

如果你想要一个整数,强制转换;如果你想要一个双精度型,请使用floor

例如,如果您想获取值的余弦值,则应使用floor,因为cos需要加倍。

但是如果你想使用exit的值(这里只是选择一个随机API),你应该进行转换,因为exit需要一个int。