在C中,这两者之间有什么区别?
float myF = 5.6;
printf( "%i \n", (int)myF ); // gives me "5"
printf( "%ld \n", floor(myF) ); // also "5"?
何时优先于另一个?
答案 0 :(得分:29)
一个很大的区别是负数;如果您将myF
更改为-5.6
,则转换为int会返回-5
,floor(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
的双倍时,“整数”double
在int
类型的变量中可以表示或不表示。
答案 3 :(得分:1)
前者将您的浮点值转换为整数(并且您在printf调用中使用了int说明符)。
后者使用floor(来自C math lib)返回已向下舍入的double。
答案 4 :(得分:0)
您希望结果为整数还是双精度?
如果你想要一个整数,强制转换;如果你想要一个双精度型,请使用floor
。
例如,如果您想获取值的余弦值,则应使用floor
,因为cos
需要加倍。
但是如果你想使用exit
的值(这里只是选择一个随机API),你应该进行转换,因为exit
需要一个int。