十进制到整数转换错误

时间:2017-03-31 23:18:08

标签: vb.net

我正在使用VIsual Studio 2015开展学校项目,其任务是创建GUI" Commute Calculator"有三种运输方式选择。我按照教科书中的说明编写了代码,但收到以下错误:

  

" BC30057“私函数CarFindCost”的参数太多(intCommuteChoice为整数,intDays为整数)为十进制'。"

我是vs的新手,但根据错误,我认为问题在于我如何声明变量。我用谷歌搜索了如何将整数转换为十进制,但没有找到任何有用的东西。代码很冗长,但我把它全部作为一个FYI。该错误发生在private sub btnCommute中,似乎与三个私有函数绑定:CarFindCost,BusFindCost和TrainFindCost。如何修复它以便我不会在私有子bthCommute中的变量intLength上出错?

Option Strict On

Public Class frmCommuteCalc
    Dim intCommuteChoice As Integer
    Dim strSelectedMode As String = ""
    Private _strGas As Integer
    Private _strMiles As String = "Enter the total miles for a round trip: "
    Private _strMilesPerGallon As Double = 2.15
    Private _strDailyParking As Decimal = 10
    Private _strMonthlyParking As Decimal
    Private _strMonthlyUpkeep As Decimal = 112
    Private _strRTBusFare As String = "Round trip bus fare is "
    Private _strRTTrainFare As String = "Round trip train fare is "
    Private _StrDays As String = "Enter the number of days worked per month: "
    Private _intTrainFare As Integer


    Private Sub frmCommuteCalc_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Threading.Thread.Sleep(5000)

    End Sub

    Private Sub cboCommuteMethod_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCommuteMethod.SelectedIndexChanged

        Dim intCommuteChoice As Integer

        intCommuteChoice = cboCommuteMethod.SelectedIndex()
        lstCommute.Items.Clear()

        Select Case intCommuteChoice
            Case 0
                Car()
            Case 1
                Train()
            Case 2
                Bus()
        End Select

        lblDays.Visible = True
        lblMiles.Visible = True
        lblLength.Visible = True
        txtDays.Visible = True
        'txtMonthlyTotal.Visible = True


    End Sub

    Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCompute.Click

        Dim intCommuteChoice As Integer
        Dim intDaysPerMonth As Integer
        Dim decTotalCost As Decimal
        Dim intLength As Integer = 0
        Dim strSelectedMode As String = ""
        Dim blnNumberInDaysIsValid As Boolean = False
        Dim blnCommuteMethodIsSelected As Boolean = False

        blnNumberInDaysIsValid = ValidateNumberInDays()

        intCommuteChoice = ValidateCommuteSelection(blnCommuteMethodIsSelected, strSelectedMode)

        If (blnNumberInDaysIsValid And blnCommuteMethodIsSelected) Then
            intDaysPerMonth = Convert.ToInt32(txtDays.Text)
            intCommuteChoice = cboCommuteMethod.SelectedIndex()
            Select Case intCommuteChoice
                Case 0
                    decTotalCost = CarFindCost(intCommuteChoice, intDaysPerMonth, intLength)
                Case 1
                    decTotalCost = BusFindCost(intCommuteChoice, intDaysPerMonth, intLength)
                Case 2
                    decTotalCost = TrainFindCost(intCommuteChoice, intDaysPerMonth, intLength)
            End Select

        End If



    End Sub

    Private Function intLength() As Object
        Throw New NotImplementedException()
    End Function

    Function ComputeCommuteCost(ByVal decMiles As Decimal, ByVal decGallons As Decimal) As Decimal

        Dim decMilage As Decimal

        decMilage = decMiles / decGallons
        Return decMilage

    End Function
    Private Sub Car()

        lstCommute.Items.Add(_strMiles)
        lstCommute.Items.Add(_strMilesPerGallon)
        lstCommute.Items.Add(_StrDays)
        lstCommute.Items.Add(_strMonthlyParking)
        lstCommute.Items.Add(_strMonthlyUpkeep)

    End Sub

    Private Sub Bus()

        lstCommute.Items.Add(_strRTBusFare)
        lstCommute.Items.Add(_StrDays)
    End Sub

    Private Sub Train()
        lstCommute.Items.Add(_StrDays)
        lstCommute.Items.Add(_strRTTrainFare)

    End Sub
    Private Function ValidateNumberInDays() As Boolean

        Dim intDays As Integer
        Dim blnValidityCheck As Boolean = False
        Dim strNumberInDaysMessage As String = "Please enter the No. of days per month you will be commuting "
        Dim strMessageBoxTitle As String = "Error"

        Try
            intDays = Convert.ToInt32(txtDays.Text)
            If intDays >= 1 And intDays <= 21 Then
                blnValidityCheck = True
            Else
                MsgBox(strNumberInDaysMessage, , strMessageBoxTitle)
                txtDays.Focus()
                txtDays.Clear()
            End If
        Catch Exception As FormatException
            MsgBox(strNumberInDaysMessage, , strMessageBoxTitle)
            txtDays.Focus()
            txtDays.Clear()
        Catch Exception As OverflowException
            MsgBox(strNumberInDaysMessage, , strMessageBoxTitle)
            txtDays.Focus()
            txtDays.Clear()
        Catch Exception As SystemException
            MsgBox(strNumberInDaysMessage, , strMessageBoxTitle)
            txtDays.Focus()
            txtDays.Clear()
        End Try

        Return blnValidityCheck

    End Function

    Private Function ValidateCommuteSelection(ByRef blnDays As Boolean, ByRef strDays As String) As Integer
        Dim intCommuteChoice As Integer

        Try
            intCommuteChoice = Convert.ToInt32(lstCommute.SelectedIndex)
            strDays = lstCommute.SelectedItem.ToString()
            blnDays = True
        Catch Exception As SystemException
            MsgBox("Select a commute mode", , "Error")
            blnDays = False
        End Try

        Return intCommuteChoice

    End Function

    Private Function CarFindCost(ByVal intCommuteChoice As Integer, ByVal intDays As Integer) As Decimal
        Dim decDaysPerMonth As Decimal
        Dim decMiles As Decimal
        Dim decMilesPerGallon As Decimal = 2
        Dim decGasTotal As Decimal
        Dim decDailyParking As Decimal = 10
        Dim decMonthlyParking As Decimal
        Dim decMonthlyUpkeep As Decimal = 112
        Dim decFinalCost As Decimal
        Dim intLength As Integer = 0

        decMiles = Convert.ToDecimal(txtMiles.Text)
        decMilesPerGallon = Convert.ToDecimal(txtGallons.Text)
        decGasTotal = decMilesPerGallon * decMiles
        decMonthlyParking = Convert.ToDecimal(lblLength.Text)
        decMonthlyParking = decDailyParking * decDaysPerMonth
        decFinalCost = Convert.ToDecimal(lblLength.Text)
        decFinalCost = decGasTotal + decMonthlyUpkeep + decMonthlyParking

        Return decFinalCost

    End Function

    Private Function BusFindCost(ByVal intCommuteChoice As Integer, ByVal intDays As Integer) As Decimal

        Dim intLength As Integer = 0
        Dim decDaysPerMonth As Decimal
        Dim decBusFarePerDay As Decimal = 4
        Dim decFinalCost As Decimal

        decBusFarePerDay = Convert.ToDecimal(txtMonthlyTotal)
        decFinalCost = decBusFarePerDay * decDaysPerMonth

        Return decFinalCost

    End Function

    Private Function TrainFindCost(ByVal intCommuteChoice As Integer, ByVal intDays As Integer) As Decimal

        Dim intLength As Integer = 0
        Dim decDaysPerMonth As Decimal
        Dim decTrainFarePerDay As Decimal = 18
        Dim decFinalCost As Decimal

        decTrainFarePerDay = Convert.ToDecimal(txtMonthlyTotal)
        decFinalCost = Convert.ToDecimal(txtMonthlyTotal)
        decFinalCost = decDaysPerMonth * decTrainFarePerDay

        Return decFinalCost

    End Function
End Class

1 个答案:

答案 0 :(得分:1)

在:

Select Case intCommuteChoice ... End Select
每个case中的

;调用函数CarFindCost,其中包含3个参数,并且只声明了2个。