在将不透明度应用于表单时,我们应该使用小数还是双精度值?

我想使用轨迹栏来更改窗体的不透明度。

这是我的代码:

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

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

不能将类型'decimal'隐式转换为'double'

我尝试使用transdouble但然后控制不起作用。 此代码在过去的VB.NET项目中运行良好。


没有必要明确地强制转换成这样的形式:

double trans = (double) trackBar1.Value / 5000.0;

将常量标识为5000.0 (或5000d )就足够了:

double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;

通用问题“十进制与双精度?”的更一般答案:用于货币计算以保留精度的十进制数, Double用于不受小差异影响的科学计算。 由于Double是一种原生于CPU的类型(内部表示存储在基数2中),因此使用Double执行的计算执行得更好,然后Decimal(内部以10为底数表示)。


你的代码在VB.NET中运行良好,因为它隐含地执行了任何强制转换,而C#同时具有隐式和显式两种转换。

在C#中,从小数到双精度的转换是明确的,因为您失去了准确性。 例如,1.1不能精确地表示为double,但可以用小数表示(请参阅“浮点数 - 由于原因而更不准确)”。

在VB中,编译器为您添加了转换:

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

(double)必须在C#中明确声明,但可以由VB的更宽容的编译器隐含。

链接地址: http://www.djcxy.com/p/15801.html

上一篇: While applying opacity to a form, should we use a decimal or a double value?

下一篇: How to convert HEX color to rgba with Less compiler?