1

この関数は私に問題を与え続けます。私はそれを機能させるための正しい組み合わせを見つけることができないようです. 一定の金額に達したら割引を適用しようとしていますが、変換エラーが発生し続けます。機能するようにすべてを定義するには、何をする必要がありますか?

Function coupon() As Decimal

        Dim decdiscount As Decimal
        Dim inta, intb, intc As Decimal

        inta = 20.0
        intb = 40.0
        intc = 60.0

        If lblSubtotal.Text > inta Then
            decdiscount = 0.05
        End If


        If lblSubtotal.Text > intb Then
            decdiscount = 0.1
        End If


        If lblSubtotal.Text > intc Then
            decdiscount = 0.2
        End If

        Return decdiscount
    End Function  
4

4 に答える 4

2

プロジェクトでOption Strictを有効にする必要があります。入力時に暗黙的な変換が行われたことを知らせることで、実行時の変換エラーを回避するのに役立ちます。次に、 BluesRockAddict と Andrew Kennan が提案するように、 Decimal.TryParseメソッドを使用できます。

上記のリンクから:

Option Strict を On に設定すると、Visual Basic は、すべてのプログラミング要素に対してデータ型が指定されていることを確認します。データ型は、明示的に指定することも、ローカル型推論を使用して指定することもできます。次の理由から、すべてのプログラミング要素に対してデータ型を指定することをお勧めします。

  • これにより、変数とパラメーターの IntelliSense サポートが有効になります。これにより、コードを入力するときにそのプロパティと他のメンバーを表示できます
  • コンパイラが型チェックを実行できるようにします。型チェックは、型変換エラーのために実行時に失敗する可能性があるステートメントを見つけるのに役立ちます。
    また、これらのメソッドをサポートしていないオブジェクトのメソッドへの呼び出しも識別します。
  • コードの実行を高速化します。この理由の 1 つは、プログラミング要素のデータ型を指定しないと、Visual
    Basic コンパイラがそれに Object 型を割り当てるためです。コンパイルされたコードは
    、Object と他のデータ型の間で相互に変換する必要がある場合があり
    、パフォーマンスが低下します。

あなたの場合、コード内の暗黙的な変換にフラグを立てます。

于 2012-04-26T05:21:57.633 に答える
1

たとえば、 Decimal.Parse ()またはDecimal.TryParse( )を使用する必要があります。

If Decimal.Parse(lblSubtotal.Text) > inta Then
    decdiscount = 0.05
End If

or

Dim subTotal As Decimal = Decimal.Parse(lblSubtotal.Text, Globalization.NumberStyles.AllowDecimalPoint)

If subTotal > inta Then
    decdiscount = 0.05
End If
于 2012-04-26T04:08:43.283 に答える
0

lblSubtotal.Text の値は数値ではないと思います。おそらく次のようなことを試してください:

Dim subTotal as Decimal
If Not Decimal.TryParse(lblSubTotal.Text, subTotal) Then
' Throw an exception or something
End If

If subTotal > inta Then
...
于 2012-04-26T04:09:35.710 に答える
0

文字列を10進数に変換する必要があります。このように文字列を10進数と比較することはできません

  If System.Convert.ToDecimal(lblSubtotal.Text) > inta Then
            decdiscount = 0.05
        End If
于 2012-04-26T04:13:07.990 に答える