我正在尝试根据一个人的年龄类别和美发沙龙的访问量来计算折扣。但它只是不能正常工作。在第二次点击之前它不计算适当的折扣,然后如果我继续按计算它会做一些奇怪的事情。只是想知道我哪里出错了,谢谢。
' Discount
If radAdult.Checked = True Then
discount = 0
ElseIf radChild.Checked = True Then
discount = totalPrice * 0.1
ElseIf radStudent.Checked = True Then
discount = totalPrice * 0.05
ElseIf radSenior.Checked = True Then
discount = totalPrice * 0.15
End If
' Additional discount
If txtClientVisits.Text >= 1 And txtClientVisits.Text <= 3 Then
additionalDiscount = 0
ElseIf txtClientVisits.Text >= 4 And txtClientVisits.Text <= 8 Then
additionalDiscount = totalPrice * 0.05
ElseIf txtClientVisits.Text >= 9 And txtClientVisits.Text <= 13 Then
additionalDiscount = totalPrice * 0.1
ElseIf txtClientVisits.Text >= 14 Then
additionalDiscount = totalPrice * 0.15
End If
totalPrice = baseRate + serviceRate - (discount + additionalDiscount)
答案 0 :(得分:0)
txtClientVisits.Text
属性的类型是String。字符串的比较运算符<
,>
,>=
和<=
执行字典比较。 VB然后将14
转换为字符串“14”,因此逐个比较每个数字,这不是你想要的。
(这就是为什么我不喜欢VB.NET - 因为它在没有警告的情况下执行这些隐式转换)。
您需要将文本框中的数字显式转换为实际数字,然后根据该数字进行比较:
Dim clientVisits As Integer = CInt( txtClientVisits.Text )
If clientVisits >= 1 AndAlso clientVisits < 4 Then
additionalDiscount = 0
ElseIf clientVisits >= 4 AndAlso clientVisits < 9 Then
additionalDiscount = totalPrice * 0.05
ElseIf clientVisits >= 9 AndAlso clientVisits < 14 Then
additionalDiscount = totalPrice * 0.1
ElseIf clientVisits >= 14 Then
additionalDiscount = totalPrice * 0.15
End If
我注意到你使用了包容性边界值。这适用于整数值,但对于连续(浮点)值将失败。请注意我如何使用>=
和<
代替>=
和<=
来避免这种情况。
另外,请注意我正在使用短路的AndAlso
运算符(与And
相比不是)。这不是功能上的改变,只是意味着程序运行得会稍快一些。
此外,您不需要ElseIf radChild.Checked = True Then
,因为.Checked
属性的值已经是布尔值,您可以这样做:
ElseIf radChild.Checked Then