我无法弄清楚我的代码问题在哪里。我的计算完成工作直到最后一种情况(CASE IS> 8),结果连续返回0.00。我确信它的东西很小,因为缺乏经验,像我这样的新手不见了。谢谢您的帮助!
'变量声明
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
答案 0 :(得分:4)
Convert.ToInt32(txtAttending.Text)
不会就地转换文本,因为您的第一行代码似乎断言;这是一个无操作。 txtAttending.Text
的类型为System.String
,并且始终具有该类型。
您的案例陈述应该更像是这样:
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
。
答案 1 :(得分:1)
您不应该先将文本转换为数字吗?我会改变这些界限:
If IsNumeric(txtAttending.Text) And Val(txtAttending.Text) <= 16 Then
Select Case Val(txtAttending.Text)
请注意,此代码段无效:Convert.ToInt32(txtAttending.Text)
,您正在将文本转换为整数,但结果不会存储在变量中。
此外,如果数字是&lt; = 0?
会发生什么答案 2 :(得分:1)
Case Else
decCost = 395 * decAttending
答案 3 :(得分:0)
除了提到的建议外,它似乎很棒,但是 你确定你所做的所有代码都已编写,或者是否存在操作的抛出代码 Diccost,或者disattending,请向我们保证。