2011-11-25 147 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#