将整型转换为双精度

本文关键字:双精度 转换 整型 | 更新日期: 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.Durationinteger, 3600也是整数,那么会有一个整数除法,也就是你的十进制值会丢失。例如,在整数除法7/2 =3中。如果你想要答案是3.5,那么你需要在除法中至少有一个十进制数,即7.0/2 = 3.57/2.0 = 3.5

尝试:

Hours.Duration = Convert.ToInt32(p);

不要将p定义为十进制。问题是,如果你想包括部分小时(例如,如果4000/3600的结果是1或2)。所以你可以直接写

小时。持续时间/= 3600;

或者如果你想计算部分小时

小时。持续时间=小时。持续时间/3600 +(()小时。持续时间% 3600> 0)?1:0);

或者如果你想要正确的进位

小时。持续时间=小时。持续时间/3600 +(()小时。

持续时间% 3600>= 1800)?

您可以使用以下代码:

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

这里是一个非常方便的转换数据类型的网页: