将整型转换为双精度
本文关键字:双精度 转换 整型 | 更新日期: 2023-09-27 18:15:36
我有一个整数(表示秒),通过除以3600将其转换为小时。然后将值存储在一个属性中(类型为int)。如果值包含小数点,则通过强制转换对其进行转换。然而,当我尝试将值赋给属性时,我得到一个错误:"不能隐式地将类型'decimal'转换为'int'。"下面是我的代码:
var p = ((Hours.Duration) / 3600.0);
(Hours.Duration) = p;
然而,Hours.Duration = (Hours.Duration) / 3600
工作正常,并舍入到int
。我做错了什么?
decimal p = ((Hours.Duration) / 3600);
(Hours.Duration) = p;
你得到错误,因为p
是十进制和小时。持续时间为整型,不进行显式强制转换,不能将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
。
尝试:
Hours.Duration = Convert.ToInt32(p);
不要将p定义为十进制。问题是,如果你想包括部分小时(例如,如果4000/3600的结果是1或2)。所以你可以直接写
小时。持续时间/= 3600;
或者如果你想计算部分小时
小时。持续时间=小时。持续时间/3600 +(()小时。持续时间% 3600> 0)?1:0);
或者如果你想要正确的进位
小时。持续时间=小时。持续时间/3600 +(()小时。
您可以使用以下代码:
int vIn = 0;
double vOut = Convert.ToDouble(vIn);
这里是一个非常方便的转换数据类型的网页: