雖然是個小問題,不過以前居然沒想過,因此仍是記下來給本身一個教訓~小程序
今天在項目計算圖片寬度時,遇到了一個很奇怪的問題,個人圖片怎麼也顯示不出來~代碼以下:函數
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);
其實就是繪製圖片的一個函數,紅色的語句表示寬度和高度的參數~(這麼寫確實不是好習慣,調試起來都不方便)因此爲了調試,新增了兩句。spa
m_twidth= (m_pTexture->GetWidth())*(800.0/1920.0)*m_scale;調試
m_theight= (m_pTexture->GetHeight())*(600.0/1080.0)*m_scale;code
通過調試發現計算的結果是0,馬上就反應過啦確定是取整問題麼,因此,心中一猜,那個m_pTexture->GetWidth()的寬度確定是int型,不出我所料,隨後問心無愧的加一個(float)強轉,兩個float就好了吧。圖片
然而。。。仍是啥也沒有,調試一看仍是0!我想了下,仍是基礎不牢,換個小程序跑跑把~編譯器
代碼以下:it
float num=0.0f; num=400*(800/1920); //num=0.03f; cout<<num<<」__」<<800/1920<<endl;
心想可能結果是0__0(這個結果表明個人心情),果真是這樣。而後我用,1920除以800,獲得結果是2,很明顯就是「/」自動取整了麼。io
不過,我想精確計算啊,忽然想了想是否是聲明變量時的精度不夠,而後改成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函數(向上取整)