我想将十进制变量“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);
其他回答
您应该使用5000.0而不是5000。
对于一般问题“十进制与双精度?”的更一般的答案:
小数用于货币计算以保持精度。Double用于不受微小差异影响的科学计算。由于Double是CPU固有的类型(内部表示形式存储在基数2中),因此使用Double进行的计算比Decimal(内部表示为基数10)执行得更好。
“不透明度”属性为双重类型:
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是整数,它将执行整数除法,结果将是整数。
不需要像这样显式转换为double:
double trans = (double) trackBar1.Value / 5000.0;
将常数确定为5000.0(或5000d)就足够了:
double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
在我看来,尽可能明确是可取的。这增加了代码的清晰度,并有助于最终可能阅读它的程序员同事。
除了(或代替)在数字后面附加一个.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);