我想将十进制变量“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);
不需要像这样显式转换为double:
double trans = (double) trackBar1.Value / 5000.0;
将常数确定为5000.0(或5000d)就足够了:
double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
由于“不透明度”是一个双精度值,我将从一开始就使用双精度,而不进行强制转换,但在除法时一定要使用双精度值以便不会丢失任何精度:
Opacity = trackBar1.Value / 5000.0;
你为什么要除以5000?只需将TrackBar的“最小值”和“最大值”设置在0和100之间,然后将“值”除以“不透明度”百分比100。以下最少20个示例可防止表单完全不可见:
private void Form1_Load(object sender, System.EventArgs e)
{
TrackBar1.Minimum = 20;
TrackBar1.Maximum = 100;
TrackBar1.LargeChange = 10;
TrackBar1.SmallChange = 1;
TrackBar1.TickFrequency = 5;
}
private void TrackBar1_Scroll(object sender, System.EventArgs e)
{
this.Opacity = TrackBar1.Value / 100;
}
听起来是这样的。不透明度是一个双值,编译器不喜欢你试图将一个十进制值塞进其中。