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 支持。这使您能够在
    键入代码时查看它们的属性和其他成员。
  • 它使编译器能够执行类型检查。类型检查可帮助您找到由于类型转换错误而可能在运行时失败的语句。它还标识对
    不支持这些方法的对象的方法的调用。
  • 它加快了代码的执行速度。这样做的一个原因是,如果您没有为编程元素指定数据类型,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

您需要将字符串转换为十进制您不能像这样将字符串与十进制进行比较

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