我想将十进制变量“trans”分配给双变量“this.Opacity”。

decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;

当我构建应用程序时,会出现以下错误:

无法将类型decimal隐式转换为double


当前回答

对于一般问题“十进制与双精度?”的更一般的答案:

小数用于货币计算以保持精度。Double用于不受微小差异影响的科学计算。由于Double是CPU固有的类型(内部表示形式存储在基数2中),因此使用Double进行的计算比Decimal(内部表示为基数10)执行得更好。

其他回答

您应该使用5000.0而不是5000。

“不透明度”属性为双重类型:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

或者简单地:

this.Opacity = trackBar1.Value / 5000.0;

or:

this.Opacity = trackBar1.Value / 5000d;

请注意,我使用5000.0(或5000d)强制进行二次除法,因为trackBar1.Value是整数,它将执行整数除法,结果将是整数。

OG事实:Double类型表示比Decimal更广泛的可能值。

铸造为双重

decimal trans = trackBar1.Value / 5000m;
this.Opacity = (double) trans;

类型转换

decimal trans = trackBar1.Value / 5000m;
this.Opacity = decimal.ToDouble(trans);

无显式强制转换/转换

在这种情况下,在常量5000d或“.0”5000.0的末尾添加“d”将标识所需的类型。当运算中没有常数时,只需将十进制变量乘以1.0或1d。

对于一般问题“十进制与双精度?”的更一般的答案:

小数用于货币计算以保持精度。Double用于不受微小差异影响的科学计算。由于Double是CPU固有的类型(内部表示形式存储在基数2中),因此使用Double进行的计算比Decimal(内部表示为基数10)执行得更好。

请尝试以下代码:

十进制值

decimal d1 = 3234.3434m;

转换为双精度

double r1 = Decimal.ToDouble(d1);