解决浮点数自动取整问题
2015-09-15 22:10
183 查看
虽然是个小问题,不过之前竟然没想过,所以还是记下来给自己一个教训~
今天在项目计算图片宽度时,遇到了一个很奇怪的问题,我的图片怎么也显示不出来~代码如下:
其实就是绘制图片的一个函数,红色的语句表示宽度和高度的参数~(这么写确实不是好习惯,调试起来都不方便)所以为了调试,新增了两句。
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!我想了下,还是基础不牢,换个小程序跑跑把~
代码如下:
心想可能结果是0__0(这个结果代表我的心情),果然是这样。然后我用,1920除以800,得到结果是2,很明显就是“/”自动取整了么。
不过,我想精确计算啊,突然想了想是不是声明变量时的精度不够,然后改为float num=0.0000f;当然,结果还是0__0(……)。
突然,灵光一现~
结果变为0.4166672__0,终于对了。
既然提到了浮点数取整问题,这里就说一下取整吧~
一般取整有下面几个方法:
1. 把值直接赋值给int,比如int a=4.9;(这样a为4,向下取整而且一般编译器会提示你的取整有数据丢失)也可以a=(int)4.9;
2. 如果浮点型数据没有精确到小数点后几位(比如上面的800/1920)“/”号可以自动取整。
3. 使用floor函数
4. 使用ceil函数(向上取整)
今天在项目计算图片宽度时,遇到了一个很奇怪的问题,我的图片怎么也显示不出来~代码如下:
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函数(向上取整)
相关文章推荐
- 赵文成 VMware Workstation nat 借助宿主机上网 (移动虚拟机需要重新添加vmdk文件)
- UVALive 6659 Dromicpalin Substrings
- 解决浮点数自动取整问题
- POJ1151Atlantis【离散化+扫描线+线段树】
- iOS学习 用代码实现界面
- axis2-1.6.2+spring3.1.4 发布 webservice 客户端调用总结
- UITableViewCell和UICollectionView的几种动画
- word
- 视频(多媒体) MediaPlayer,camera
- 格式验证、密码加密
- 第三天 音乐播放器
- Linux 内核的同步机制,第 1 部分 + 第二部分(转)
- 记一次性能优化经历
- 当心!这八类人容易被癌症盯上
- 游戏中为何没有“金庸著”?
- GMT5.1.2_基础_世界底图的绘制
- 2015秋季校园招聘 IT公司笔试题
- HTML 文本格式化
- GOF23设计模式之 建造者模式
- extern 和 static 对变量的作用