我不断收到这条恼人的消息(即使这是我的错):
从字符串“”到“Double”类型的转换无效。
我在VB 2010 Express中调试时收到此消息,然后点击“SLM”按钮。这到底意味着什么,我做错了什么?!?!
我的代码:
Public Class frmAssignment_5
Private Sub btnSLM_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSLM.Click
Dim Description As String
Dim Year As String
Dim Life As String
Dim SLMDepreciation As String
Dim SLMText As String = "straight-line"
txtDescription.Clear()
txtYear.Clear()
txtCost.Clear()
txtLife.Clear()
lstResult.ClearSelected()
Description = CStr(txtDescription.Text)
Year = CStr(txtYear.Text)
Life = CStr(txtLife.Text)
SLMDepreciation = CStr(SLMD())
lstResult.Items.Add("Description: " & Description)
lstResult.Items.Add("Year of purchase: " & Year)
lstResult.Items.Add("Cost: " & FormatCurrency(CStr(txtCost.Text), 2))
lstResult.Items.Add("Estimated life: " & Life)
lstResult.Items.Add("Method of depreciation: " & SLMText)
End Sub
Function SLMD() As Double
Dim Salvage_Value As Integer = 0
Dim Life As String = CStr(txtLife.Text)
Dim Cost As String = CStr(txtCost.Text)
SLMD = (CDbl(txtCost.Text) - Salvage_Value) / CDbl(Life)
Return SLMD
End Function
End Class
错误一直发生在“SLMD =(CDbl(txtCost.Text) - Salvage_Value)/ CDbl(生命)”,但是当我改变现状时,它会开始指向我改变的东西,并出现同样的错误。< / p>
如果有人能帮助我,我将永远处于债务状态......
答案 0 :(得分:3)
VB抱怨,因为您正在尝试将空字符串“”值转换为数字。如果在每个字符串周围放置VAL(),它会将其转换为零。
Salvage_Value也被声明为一个Integer,但是你将它用作Double,所以你在计算SLMD时也需要转换它:
SLMD = (Val(txtCost.Text) - CDbl(Salvage_Value)) / Val(Life)
如果“Life”未设置为某个值,您也有被零错误分割的风险,因此您应该添加代码以确保在那里输入值。
答案 1 :(得分:3)
这与我刚刚回答的问题非常相似。当您使用CDbl转换字符串时,如果转换不可能会出错,我会做的是使用Double.TryParse并单独设置值,然后如果有错误我会处理它。
Function SLMD() As Double
Dim Salvage_Value As Integer = 0
Dim Life As Double
Dim Cost As Double
If Not Double.TryParse(txtLife.Text, Life) Then
'Do something to handle error
End If
If Not Double.TryParse(txtCost.Text, Cost) Then
'Do something to handle error
End If
Return (Cost - Salvage_Value) / Life
End Function
答案 2 :(得分:0)
我认为您正在尝试将空String
(""
)转换为Double
CDbl(txtCost.Text)
。这不是有效的转化,因为“”不是有效的
Double
值。
我认为您应该在尝试转换之前检查自己的txtCost.Text
,看看它是否真的是Double
代表String
。您可以尝试阻止来自客户端的无效字符/值,或者在收到它之后(但在尝试转换之前)从服务器检查它。另一种选择是在try+catch+finally语句中处理它。 This post也可能对您遇到的问题有所帮助。