这个功能一直给我带来问题我似乎找不到合适的组合让它运转起来。如果达到某些金额,我试图申请折扣,但我一直收到转换错误。我需要做什么才能定义所有内容以便它起作用?
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
答案 0 :(得分:2)
你真的应该为你的项目启用Option Strict。通过让您知道在输入时有隐式转换,它可以帮助您在运行时避免转换错误。然后,您可以使用Decimal.TryParse方法作为BluesRockAddict和Andrew Kennan建议。
从上面链接:
将Option Strict设置为On时,Visual Basic会检查该数据类型 为所有编程元素指定。数据类型可以是 显式指定,或使用本地类型推断指定。 为所有编程元素指定数据类型是 建议,原因如下:
- 它支持IntelliSense支持您的变量和参数。这使您可以看到他们的属性和其他成员 类型代码。
- 它使编译器能够执行类型检查。类型检查可帮助您查找因类型而在运行时失败的语句 转换错误。它还标识对对象上方法的调用 不支持这些方法的。
- 它加快了代码的执行速度。其中一个原因是,如果您没有为编程元素指定数据类型,那么Visual 基本编译器为其指定Object类型。编译后的代码可能有 在Object和其他数据类型之间来回转换,其中 降低性能。
在您的情况下,它会标记代码中的隐式转换。
答案 1 :(得分: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
答案 2 :(得分: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
...
答案 3 :(得分:0)
你需要将你的字符串转换为十进制,你不能像这样将字符串与十进制比较
If System.Convert.ToDecimal(lblSubtotal.Text) > inta Then
decdiscount = 0.05
End If