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

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

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

什么时候优于另一个?

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

至于哪个更可取,根据经验,如果你知道你需要的东西,我会说只会转换成一个整数 – 而且既然你在这里问,那么很可能你想要floor

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

floor(n)返回floor(n)的数学下限,即不大于n的最大整数。 (int)n返回(int)n的截断, n绝对值不大于n的整数。 类似地, ceil(n)返回ceil(n)的数学上限,或者不小于n的最小整数。 正如AraK所指出的那样, floor()ceil()返回的数字可能不适合int的范围。

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

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

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

你想要结果是整数还是双?

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

例如,如果你想获得值的余弦,你应该只使用floor因为cos需要加倍。

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