您的位置:首页 > 其它

解决浮点数自动取整问题

2015-09-15 22:10 169 查看
虽然是个小问题,不过之前竟然没想过,所以还是记下来给自己一个教训~

今天在项目计算图片宽度时,遇到了一个很奇怪的问题,我的图片怎么也显示不出来~代码如下:

m_pRenderer->Draw2dImage(m_positionX,m_positionY,m_pTexture->GetWidth()*(800/1920)*m_scale,m_pTexture->GetHeight()*(600/1080)*m_scale,
m_pTexture ? m_pTexture->GetTextureID() :-1,
0.0f,1.0f,1.0f,0.0f, // texcoords
0.0f, // angle
m_drawColor.r,m_drawColor.g, m_drawColor.b,m_drawColor.a,
0.0f);


其实就是绘制图片的一个函数,红色的语句表示宽度和高度的参数~(这么写确实不是好习惯,调试起来都不方便)所以为了调试,新增了两句。

m_twidth= (m_pTexture->GetWidth())*(800.0/1920.0)*m_scale;

m_theight= (m_pTexture->GetHeight())*(600.0/1080.0)*m_scale;

经过调试发现计算的结果是0,立刻就反应过啦肯定是取整问题么,所以,心中一猜,那个m_pTexture->GetWidth()的宽度肯定是int型,不出我所料,随后心安理得的加一个(float)强转,两个float就行了吧。

然而。。。还是啥也没有,调试一看还是0!我想了下,还是基础不牢,换个小程序跑跑把~

代码如下:

float num=0.0f;
num=400*(800/1920);
//num=0.03f;
cout<<num<<”__”<<800/1920<<endl;


心想可能结果是0__0(这个结果代表我的心情),果然是这样。然后我用,1920除以800,得到结果是2,很明显就是“/”自动取整了么。

不过,我想精确计算啊,突然想了想是不是声明变量时的精度不够,然后改为float num=0.0000f;当然,结果还是0__0(……)。

突然,灵光一现~

float num=0.0f;
num=400*(800.000/1920.000);
//num=0.03f;
cout<<num<<”__”<<800/1920<<endl;


结果变为0.4166672__0,终于对了。

既然提到了浮点数取整问题,这里就说一下取整吧~

一般取整有下面几个方法:

1. 把值直接赋值给int,比如int a=4.9;(这样a为4,向下取整而且一般编译器会提示你的取整有数据丢失)也可以a=(int)4.9;

2. 如果浮点型数据没有精确到小数点后几位(比如上面的800/1920)“/”号可以自动取整。

3. 使用floor函数

4. 使用ceil函数(向上取整)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: