我想将十进制变量“trans”分配给双变量“this.Opacity”。
decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;
当我构建应用程序时,会出现以下错误:
无法将类型decimal隐式转换为double
我想将十进制变量“trans”分配给双变量“this.Opacity”。
decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;
当我构建应用程序时,会出现以下错误:
无法将类型decimal隐式转换为double
当前回答
在我看来,尽可能明确是可取的。这增加了代码的清晰度,并有助于最终可能阅读它的程序员同事。
除了(或代替)在数字后面附加一个.0,还可以使用decimal.ToDouble()。
以下是一些示例:
// Example 1
double transparency = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transparency);
// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
其他回答
听起来是这样的。不透明度是一个双值,编译器不喜欢你试图将一个十进制值塞进其中。
假设您使用的是WinForms,Form.Optity是double类型,因此您应该使用:
double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;
除非您在其他地方需要该值,否则写起来更简单:
this.Opacity = trackBar1.Value / 5000.0;
当您将代码更改为简单的双精度时,控件不起作用的原因是:
double trans = trackbar1.Value / 5000;
它将5000解释为整数,因为trackbar1.Value也是整数,所以trans值始终为零。通过添加.0显式地使数字成为浮点值,编译器现在可以将其解释为双精度值并执行正确的计算。
由于“不透明度”是一个双精度值,我将从一开始就使用双精度,而不进行强制转换,但在除法时一定要使用双精度值以便不会丢失任何精度:
Opacity = trackBar1.Value / 5000.0;
最佳解决方案是:
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
在我看来,尽可能明确是可取的。这增加了代码的清晰度,并有助于最终可能阅读它的程序员同事。
除了(或代替)在数字后面附加一个.0,还可以使用decimal.ToDouble()。
以下是一些示例:
// Example 1
double transparency = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transparency);
// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);