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将返回-5
而floor(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
时,那个“整数” double
在int
类型的变量中可以表示或不表示。
前者将您的浮点值转换为整数(并且您在printf调用中使用了int说明符)。
后者使用floor(来自C math lib)返回已向下舍入的double。
你想要结果是整数还是双?
如果你想要一个整数,强制转换; 如果你想要一个双,使用floor
。
例如,如果你想获得值的余弦,你应该只使用floor
因为cos
需要加倍。
但是如果你想使用exit
值(只是在这里选择一个随机API),你应该进行强制转换,因为exit
需要一个int。