2011-11-25 178 views
0

我有一個整數(表示秒),我將其轉換爲小時除以3600.然後將值存儲在屬性中(類型爲int)。如果該值包含小數點,我通過轉換將其轉換。但是,當我嘗試將值賦給屬性時,出現錯誤:「不能將類型'decimal'隱式轉換爲'int'。」這裏是我的代碼:從int轉換爲double

var p = ((Hours.Duration)/3600.0); 
(Hours.Duration) = p; 

然而,

Hours.Duration = (Hours.Duration)/3600 

工作正常,並且發到int。我究竟做錯了什麼?

+1

哪種語言? – ThomasW

+0

同類問題[here](http://stackoverflow.com/questions/501090/c-sharp-how-do-i-convert-a-decimal-to-an-int) – abhinav

+0

我使用c#.... – Premanshu

回答

1

嘗試:

Hours.Duration = Convert.ToInt32(p); 
+0

感謝nc3b .... – Premanshu

2
decimal p = ((Hours.Duration)/3600); 
(Hours.Duration) = p; 

你得到錯誤,因爲p是小數和Hours.Duration是整數,不能分配十進制沒有明確的鑄造爲int。

(Hours.Duration) = (int)p; 

如果Hours.Durationinteger,3600也整數,則會有一個整數除法,這是你的十進制值將會丟失。例如在整數除法7/2 =3。如果您希望答案爲3.5,那麼您需要在分區中有至少一個十進制數,即7.0/2 = 3.57/2.0 = 3.5

+0

如果Hours.Duration = 1800,那麼p = 0.5 ..但是如何再次將該值分配給Hours.Duration。在第2行的顯式轉換 Convert.ToDecimal((Hours.Duration))= p; 錯誤指出,賦值的lhs必須是變量,屬性,索引器。 – Premanshu

+0

Hours.Duration的類型是什麼? @Premanshu – Zohaib

+0

類型爲int .. – Premanshu

0

不要將p定義爲小數。問題是,如果你想包括部分時間(例如,如果4000/3600的結果是1或2)。所以你可以直接寫

Hours.Duration/= 3600;

或者如果要計數也局部小時

Hours.Duration = Hours.Duration/3600 +((Hours.Duration%3600> 0)?1:0);

或者如果要正確的舍入最多

Hours.Duration = Hours.Duration/3600 +((Hours.Duration%3600> = 1800)?1:0);

+0

謝謝@Ivo ...因爲Hours.Duration結果是一個int,因此增加小數部分仍然會導致error.Isn't?非常感謝答覆。 – Premanshu

+0

Hours.Duration將爲1,可接受。但小數部分如何計算理想情況下,4500應產生爲 4500/3600 = 1.25 因此,我們在哪裏添加小數部分(分割後剩餘900秒)?我認爲我們不能在投射後將十進制值賦予int類型。更多的文獻肯定會對我有所幫助。感謝您的關注。謝謝Ivo – Premanshu

+0

如果您需要顯示小數部分,您肯定需要更改Hours.Duration類型。或者考慮小時:分鐘:秒的格式。 –

0

您可以使用此代碼:

int vIn = 0; 
double vOut = Convert.ToDouble(vIn); 

這裏是別人的一個非常方便的轉換數據類型的網頁:Convert decimal to int in C#