2012-04-02 59 views
2

我無法弄清楚我的代碼問題在哪裏。我的計算完美無缺,直到最後一種情況(CASE IS> 8),結果連續返回0.00。我敢肯定,由於缺乏經驗,像我這樣的新手缺少一些小東西。感謝您的幫助!文字VB 2010中的計算問題

'的可變

Convert.ToInt32(txtAttending.Text) 
Dim decAttending = txtAttending.Text 

If IsNumeric(txtAttending.Text) And txtAttending.Text <= 16 Then 
    Select Case txtAttending.Text 
     Case Is = 1 
      decCost = 695 * decAttending 
     Case 2 To 4 
      decCost = 545 * decAttending 
     Case 5 To 8 
      decCost = 480 * decAttending 
     Case Is > 8 
      decCost = 395 * decAttending 
    End Select 
Else 
    MsgBox("Please double check that your input is a number not greater than 16", , "Input Error") 

End If 

If radYes.Checked = True Then 
    decFinalCost = (decCost - (decCost * 0.15)) 
    lblRepeatDiscount.Visible = True 
    decDiscount = (decCost * 0.15) 
    lblDiscount.Text = decDiscount.ToString("C") 
    lblTotalPrice.Text = decFinalCost.ToString("C") 

Else 
    decFinalCost = decCost 
    lblTotalPrice.Text = decFinalCost.ToString("C") 
End If 
+2

你確定decAtothending不是0? – Pete 2012-04-02 00:24:51

+0

將選項嚴格打開在您的代碼頂部 – 2012-04-02 13:55:40

回答

1
Case Else 
     decCost = 395 * decAttending 
+0

完美!這解決了我的問題,並正在我的筆記!謝謝! – 2012-04-02 01:41:02

+1

如果用戶輸入負數,會返回什麼? – 2012-04-02 13:57:21

1

聲明你不應該轉換爲數字第一?我會改變這些行:

If IsNumeric(txtAttending.Text) And Val(txtAttending.Text) <= 16 Then 
    Select Case Val(txtAttending.Text) 

請注意,這段代碼沒有任何效果:Convert.ToInt32(txtAttending.Text),你是一個文本轉換爲整數,但結果不被存儲在一個變量。

另外,如果數字爲< = 0,會發生什麼情況?

4

Convert.ToInt32(txtAttending.Text)不會就地轉換文本,因爲您的第一行代碼似乎斷言;這是一個沒有操作。 txtAttending.Text的類型爲System.String,並且將始終具有該類型。

你的case語句應該看起來更像是這樣的:

If IsNumeric(txtAttending.Text) Then 

    Dim decAttending = Convert.ToInt32(txtAttending.Text) 

    Select Case decAttending 
     Case Is = 1 
      decCost = 695 * decAttending 
     Case 2 To 4 
      decCost = 545 * decAttending 
     Case 5 To 8 
      decCost = 480 * decAttending 
     Case 9 To 16 
      decCost = 395 * decAttending 
    End Select 
Else 
    MsgBox("Please double check that your input is a number not greater than 16", , "Input Error") 

這個版本總是使用System.Int32變量decAttending做數字運算時。

+0

我根據您的建議進行了更新,並且除最後(9到16)之外的所有計算仍在工作。我得到最後一個選項爲零,不知道我錯了什麼? – 2012-04-02 00:42:39

+0

在這種情況下,是時候開始調試了。你可以開始在'decCost = 395 * decAttending'行上面添加一個MsgBox(decAttending)行 – 2012-04-02 00:47:26

+0

我已經按照建議添加了msgbox行,並且它不會返回任何東西......我很難過。 – 2012-04-02 00:58:10

0
從所提意見

除此之外,看起來很大,但 你確定你做了所有的代碼編寫,或者是有操縱 Diccost,或disattending拋出代碼,請向我們保證。