2015-10-09 122 views
0

我試圖根據一個人的年齡類別和髮廊的訪問量來計算折扣。這只是不正常工作。它不計算正確的折扣,直到第二次點擊,然後它做了一些奇怪的東西,如果我繼續按計算。只是想知道我哪裏錯了,謝謝。在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) 
+0

你沒有張貼的所有代碼。你可以發佈**哪裏**它不能正確計算? –

+0

開關選項嚴格要求 –

回答

0

txtClientVisits.Text屬性的類型是一個字符串。比較運算符<,>,>=<=用於字符串執行字典對比。 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 
+2

選項嚴格是你的朋友 – peterG

+0

似乎沒有什麼區別@戴 – YoungMogul

+0

@YoungMogul當你逐步調試時會發生什麼? – Dai