VB开启Option Strict后Double转Long隐式转换错误求助
解决Option Strict On下Double到Long的隐式转换错误
嘿,我来帮你搞定这个问题!咱们先把问题根源说清楚:
你用的\是VB里的整数除法运算符,它要求左右两边的操作数必须是整数类型(比如Integer、Long)。但你现在把value1和value2声明成了Double类型,在Option Strict On的严格模式下,VB不允许这种“悄悄把Double转成Long”的隐式转换,所以才会弹出那个错误提示。
而且不光是整数除法,你代码里的Mod运算符也会遇到同样的问题,因为它同样要求操作数是整数类型。
下面给你两种解决方案,你可以根据需求选:
方案1:直接把变量改成整数类型(推荐,如果你确定输入都是整数)
既然你在btnAdd_Click里用的是Integer.Parse解析输入,说明你预期用户输入的是整数,那干脆把value1和value2的类型改成Integer或者Long就完事了:
Public Class frmMathCalculator ' 把Double改成Integer Dim value1 As Integer Dim value2 As Integer Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click value1 = Integer.Parse(txtValue1.Text) value2 = Integer.Parse(txtValue2.Text) Dim addResult As Double = value1 + value2 lstAnswer.Items.Add(addResult) End Sub ' ...其他方法不变... Private Sub btnIntDiv_Click(sender As Object, e As EventArgs) Handles btnIntDiv.Click ' 现在操作数是整数,\运算符可以直接用,不会报错 Dim intDivResults As Double = value1 \ value2 lstAnswer.Items.Add(intDivResults) End Sub Private Sub btnMod_Click(sender As Object, e As EventArgs) Handles btnMod.Click ' Mod也可以正常用了 Dim modResults As Double = value1 Mod value2 lstAnswer.Items.Add(modResults) End Sub ' ...其他方法不变... End Class
方案2:保留Double类型,显式转换为整数(如果需要支持小数输入)
如果你希望value1和value2能存储小数,但仍要做整数除法,那就要用CLng()或者CInt()显式把Double转成整数类型:
Private Sub btnIntDiv_Click(sender As Object, e As EventArgs) Handles btnIntDiv.Click ' 显式把Double转成Long,再做整数除法 Dim intDivResults As Double = CLng(value1) \ CLng(value2) lstAnswer.Items.Add(intDivResults) End Sub Private Sub btnMod_Click(sender As Object, e As EventArgs) Handles btnMod.Click ' Mod也需要显式转换 Dim modResults As Double = CLng(value1) Mod CLng(value2) lstAnswer.Items.Add(modResults) End Sub
这里要注意:CLng()会把Double的小数部分四舍五入到最近的整数,如果你想直接截断小数部分,可以用Fix()(比如Fix(value1)会直接去掉小数部分取整)。
这样修改后,你的代码就能在Option Strict On模式下正常运行啦!
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

