【C/C++】强制转换(int)与floor/ceil函数的不同

来源:互联网 发布:藏獒崩盘 知乎 编辑:程序博客网 时间:2024/06/15 06:26

相信很多新手程序员在遇到浮点数赋值给整型时。为了方便习惯将一个浮点类型强制转换为整型。而这是非常不正确的,会出现错误。下面做一些说明。


强制转换(int)与floor的区别。

首先floor返回小于或等于它的最大整数。

而(int)在大多数情况返回整数部分。

所以他们的求值在负数的情况是不一样的,如floor(-3.2)=-4,(int)-3.2=-3,这点想必也有很多人知道。


但是看了一些解释,绝大多数人认为floor和(int)在正数的情况下是等价的。这点是完全错误的!而且反例也不难找到。参考以下代码:

#include <stdio.h>#include <math.h>int main(){   float i=90;   int a=(int)(i*0.3);   int b=floor(i*0.3);   float out=i*0.3;   printf("a=%d b=%d\n",a,b);   printf("%f\n",out);}

用gcc编译运行,结果如下:

a=26 b=27
27.000000

可以看到,强制转换和floor的结果不同!

所以,为了精确,写代码的时候请注意此情况。


0 0
原创粉丝点击