从int转换为double

时间:2011-11-25 06:56:46

标签: c# .net casting

我有一个整数(代表秒数),我将其转换为小时数除以3600.然后我将值存储在属性中(类型为int)。如果值包含小数点,我通过强制转换它。但是,当我尝试将值赋给属性时,我收到一个错误:“无法将类型'decimal'隐式转换为'int'。”这是我的代码:

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

然而,

Hours.Duration =  (Hours.Duration) / 3600

工作正常,并且会转到int。我做错了什么?

4 个答案:

答案 0 :(得分:2)

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

您收到错误,因为p是十进制且Hours.Duration是整数,如果没有显式转换,则不能将decimal指定给int。

(Hours.Duration) = (int)p;

如果Hours.Durationinteger,3600也是整数,则会有整数除法,即您的十进制值将丢失。例如在整数除法7/2 =3中。如果您希望答案为3.5,那么您需要在分区中至少有一个十进制数,即7.0/2 = 3.57/2.0 = 3.5

答案 1 :(得分:1)

尝试:

Hours.Duration = Convert.ToInt32(p);

答案 2 :(得分: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);

答案 3 :(得分:0)

您可以使用此代码:

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

以下是一个非常方便的转换数据类型网页:Convert decimal to int in C#