计算VB.NET中的折扣

时间:2015-10-09 00:21:26

标签: vb.net

我正在尝试根据一个人的年龄类别和美发沙龙的访问量来计算折扣。但它只是不能正常工作。在第二次点击之前它不计算适当的折扣,然后如果我继续按计算它会做一些奇怪的事情。只是想知道我哪里出错了,谢谢。

' 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)

1 个答案:

答案 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