解決浮點數自動取整問題

雖然是個小問題,不過以前居然沒想過,因此仍是記下來給本身一個教訓~小程序

今天在項目計算圖片寬度時,遇到了一個很奇怪的問題,個人圖片怎麼也顯示不出來~代碼以下:函數

   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函數(向上取整)
相關文章
相關標籤/搜索