0

私はこの迷惑なメッセージを受け取り続けます (それは私のせいですが):

文字列 "" から型 '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(Life)」でエラーが発生し続けますが、変更すると、同じエラーで変更したものを指し始めます。

もし誰かが私を助けてくれるなら、私は永遠の借金を背負うことになるだろう...

4

3 に答える 3

4

空の文字列 "" 値を数値に変換しようとしているため、VB は不平を言っています。各文字列を VAL() で囲むと、0 に変換されます。

Salvage_Value も Integer として宣言されていますが、Double として使用しているため、SLMD を計算するときにそれも変換する必要があります。

SLMD = (Val(txtCost.Text) - CDbl(Salvage_Value)) / Val(Life)

また、"Life" に値が設定されていない場合、0 による除算エラーが発生するリスクがあるため、値がそこに入力されていることを確認するコードを追加する必要があります。

于 2012-07-16T02:37:03.160 に答える
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
于 2012-07-16T02:44:26.353 に答える
0

String空の( "") をDoubleatに変換しようとしているように見えますCDbl(txtCost.Text)" " は有効なDouble値ではないため、これは有効な変換ではありません。

変換を試みる前txtCost.Textに、実際に aDoubleとして表されているかどうかを確認する必要があると思います。String無効な文字/値をクライアントからブロックするか、受信後にサーバーから確認することができます (ただし、変換を試みる前に)。別のオプションは、try+catch+finallyステートメントで処理することです。この投稿は、あなたが直面していることにも役立つかもしれません。

于 2012-07-16T02:40:37.987 に答える