首页 / 知识
关于C#: Decimal转 Double
2023-04-11 12:34:00

Convert Decimal to Double?
我想使用跟踪栏更改窗体的不透明度。
这是我的代码:
1 2 | decimal trans = trackBar1.Value / 5000; this.Opacity = trans; |
当我构建应用程序时,它会给出以下错误:
Cannot implicitly convert type
'decimal' to'double' .
我试过使用
不需要像这样显式转换为double:
1 | double trans = (double) trackBar1.Value / 5000.0; |
将常数标识为
1 2 | double trans = trackBar1.Value / 5000.0; double trans = trackBar1.Value / 5000d; |
对一般性问题"十进制与双精度"的更一般的回答。:小数表示货币计算以保持精度,两倍表示不受小差异影响的科学计算。由于double是CPU本身的一种类型(内部表示法存储在基2中),因此使用double进行的计算比使用decimal(内部表示法为基10)执行得更好。
您的代码在vb.net中工作得很好,因为它隐式地执行任何类型转换,而C同时具有隐式和显式两种类型。
在C中,从十进制到double的转换是明确的,因为您会失去准确性。例如,1.1不能准确地表示为双精度数,但可以表示为十进制数(请参阅"浮点数-比您想象的更不准确"了解原因)。
在VB中,编译器为您添加了转换:
1 2 | decimal trans = trackBar1.Value / 5000m; this.Opacity = (double) trans; |
你为什么除以5000?只需将轨迹条的最小值和最大值设置为0到100,然后将不透明度百分比的值除以100。以下至少20个示例可防止窗体完全不可见:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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; } |
你有两个问题。首先,
1 | trackBar.Opacity = (double)trackBar.Value / 5000.0; |
在我看来,最好尽可能明确。这增加了代码的清晰度,并帮助您的程序员同事最终阅读它。
除了(或代替)在数字上附加一个
以下是一些例子:
1 2 3 4 5 6 | // Example 1 double transperancy = trackBar1.Value/5000; this.Opacity = decimal.ToDouble(transperancy); // Example 2 - with inline temp this.Opacity = decimal.ToDouble(trackBar1.Value/5000); |
听起来
你应该使用
假设您使用的是WinForms,那么
1 2 | double trans = trackBar1.Value / 5000.0; this.Opacity = trans; |
除非您在其他地方需要该值,否则编写:
1 | this.Opacity = trackBar1.Value / 5000.0; |
当您将代码更改为简单的double时,控件不起作用的原因是:
1 | double trans = trackbar1.Value / 5000; |
它将
不透明度属性为双类型:
1 2 | double trans = trackBar1.Value / 5000.0; this.Opacity = trans; |
或者简单地说:
1 | this.Opacity = trackBar1.Value / 5000.0; |
或:
1 | this.Opacity = trackBar1.Value / 5000d; |
注意,我使用
因为
1 | Opacity = trackBar1.Value / 5000.0; |
最好的解决方案是:
1 | this.Opacity = decimal.ToDouble(trackBar1.Value/5000); |
1 | this.Opacity = trackBar1.Value / 5000d; |
最新内容
相关内容
python错误类型有哪些
python错误类型有哪些,异常,系统,培训,错误,代码,标准,检测,类型,程序,逻辑,python的错误有语法错误和逻辑错误语法错误程序执行过程中,pythonpython怎样忽略warning警告错误?
python怎样忽略warning警告错误?,培训,情况,代码,错误,模块,下面,之前,以上,程序,更多,python开发中经常遇到报错的情况,但是warning通常并不关于体系结构:我应该如何构建Java应
关于体系结构:我应该如何构建Java应用程序,将类放在哪里?,关于体系结构:我应该如何构建Java应用程序,将类放在哪里?,应用程序,支持,困惑,关于Visual Studio:部署VB.NET应用
关于Visual Studio:部署VB.NET应用程序的最佳方法是什么?,关于Visual Studio:部署VB.NET应用程序的最佳方法是什么?,也有,我不,当我,但在C#WinForms应用程序中显示Flash内
在C#WinForms应用程序中显示Flash内容,在C#WinForms应用程序中显示Flash内容,方法,应用程序,用户控件,显示,Displaying Flash contentJavaScript 错误 - Throw 和 Try t
JavaScript 错误 - Throw 和 Try to Catch,JavaScript,错误,Throw,和,Try,Catch,JavaScript,错误,,JavaScript 错误 - Throw 和 TryJava库或应用程序将CSV转换为XML文
Java库或应用程序将CSV转换为XML文件?,Java库或应用程序将CSV转换为XML文件?,标签,数据文件,应用程序,文件,Java lib or app to conver