2012-05-17 36 views
0

因此resizeWidth和resizeHeight是下面這段代碼中的numericUpDown控件。 另外,tempBitmapW和tempBitmapH都是浮點數。將NumericUpDown值設置爲浮點數時將變爲0

float rW = (float)resizeWidth.Value; 
float rH = (float)resizeHeight.Value; 
rH = (float)Math.Truncate(tempBitmapH * ((float)rW/tempBitmapW)); 
int rsW = (int)rW; 
int rsH = (int)rH; 
resizeWidth.Value = rsW; 
resizeHeight.Value = rsH; 

現在,當我調試此,RSW和rsh和RW和Rh不讀爲0,沒有。 但由於某些原因的NumericUpDown控件拋出一個錯誤,因爲數值0是出方的最小/最大範圍(最低設置爲1),所以基本上是讀它爲0

我做了什麼錯?

+1

tempBitmapH,resizeWidth.Value和resizeHeight.Value的原始值是什麼? – carlosfigueira

+0

你確定rsW和rsH是否大於0?這不是一個正常的行爲。 –

回答

1

你只是不明白如何強制轉換工作。 由於您將float轉換爲int的方式,您將獲得0.浮點值可能爲0.42,但會在整數中轉換爲0。

你應該檢查如何強制轉換細節,這可能會解決你的問題。

+0

謝謝,但我發現這個問題,我不知道,如果你基本上是這樣說,但由於這需要每一次的的NumericUpDown價值變動一個地方,它只是不斷射擊對方,當它在最後改變了,所以它只是不斷減少它,直到它達到0.我已經解決了現在的問題,所以它只會在手動更改值時觸發。 –

0

爲了擴大squelos的答案 - 它聽起來像也許是你在查看調試器中的值和異常被拋出的時刻是兩個不同的時刻。如果您收到一個說明該值爲零的例外情況,可能是因爲該值爲零。

原因它可能變成零是因爲從float到int的轉換總是舍入到最接近的整數。