解决浮点数自动取整问题
来源:互联网 发布:linux查看内存报错 编辑:程序博客网 时间:2024/06/05 05:13
虽然是个小问题,不过之前竟然没想过,所以还是记下来给自己一个教训~
今天在项目计算图片宽度时,遇到了一个很奇怪的问题,我的图片怎么也显示不出来~代码如下:
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函数(向上取整)- 解决浮点数自动取整问题
- PHP5.2(暂不清楚是不是版本问题)读XML浮点数相加自动取整的解决方法
- php浮点数 取整 进一取整 四舍五入
- 取读浮点数
- 浮点数精度丢失问题的解决
- 最快浮点数取绝对值
- 最快浮点数取绝对值
- fscanf直接获取浮点数误差问题及解决
- 在javascript中解决浮点数加减的问题
- java浮点数运算不准确问题的解决
- 【Java】解决计算浮点数精度问题(BigDecimal)
- Java中解决浮点数精度的问题
- Java中解决浮点数精度的问题
- 解决javascript中的浮点数计算不精确问题
- Java中解决浮点数精度的问题
- 解决js浮点数计算不准确问题
- 浮点数误差问题?
- 浮点数问题
- Unity物理引擎:关节简介(固定关节)
- word
- Objective-C 基础知识之(十): OC中的排序方法
- springMVC 注解参数传递方式
- Java中的Callable和Future
- 解决浮点数自动取整问题
- HDOJ 1877 又一版 A+B(进制转换,水)
- Oracle 分区表相关信息
- hdu 1251 简单字典树
- UVALive 6653 Pattern Locker(组合数学)
- Cascade Adaboost级联分类器的训练
- Flume前述(二)--功能配置
- 网易2016两道题Assuming Digits && Best Compression Algorithms
- 趣吃饭相关 资料