我有一个整数(代表秒数),我将其转换为小时数除以3600.然后我将值存储在属性中(类型为int)。如果值包含小数点,我通过强制转换它。但是,当我尝试将值赋给属性时,我收到一个错误:“无法将类型'decimal'隐式转换为'int'。”这是我的代码:
var p = ((Hours.Duration) / 3600.0);
(Hours.Duration) = p;
然而,
Hours.Duration = (Hours.Duration) / 3600
工作正常,并且会转到int
。我做错了什么?
答案 0 :(得分:2)
decimal p = ((Hours.Duration) / 3600);
(Hours.Duration) = p;
您收到错误,因为p
是十进制且Hours.Duration是整数,如果没有显式转换,则不能将decimal指定给int。
(Hours.Duration) = (int)p;
如果Hours.Duration
为integer
,3600也是整数,则会有整数除法,即您的十进制值将丢失。例如在整数除法7/2 =3
中。如果您希望答案为3.5,那么您需要在分区中至少有一个十进制数,即7.0/2 = 3.5
或7/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#