Vb.net VB-处理负值

Vb.net VB-处理负值,vb.net,negative-number,Vb.net,Negative Number,我正在上VB初级课程,刚刚编写了我的第一个程序,一个工资计算器,额外的奖金是计算加班和双倍时间的工资,要求用户只输入工作时间和工资率。到目前为止,它运行就像我设计的一样,只有一个缺陷。如果用户在不到8小时内输入,我会得到加班工作小时数的负数,这会完全扰乱工资的计算。我认为在小时数小于或等于零的条件语句中输入条件语句可以解决这个问题,但它仍然打印并计算负数 有人能指出我在这里遗漏了什么吗?我相信这将是一件我从未想过的简单事情 提前谢谢你 Private Sub btnCalculate_Click

我正在上VB初级课程,刚刚编写了我的第一个程序,一个工资计算器,额外的奖金是计算加班和双倍时间的工资,要求用户只输入工作时间和工资率。到目前为止,它运行就像我设计的一样,只有一个缺陷。如果用户在不到8小时内输入,我会得到加班工作小时数的负数,这会完全扰乱工资的计算。我认为在小时数小于或等于零的条件语句中输入条件语句可以解决这个问题,但它仍然打印并计算负数

有人能指出我在这里遗漏了什么吗?我相信这将是一件我从未想过的简单事情

提前谢谢你

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    Dim dblHoursWorked As Double = 0 'to hold hours worked
    Dim dblHourlyPayRate As Double = 0 'to hold hourly pay rate
    Dim dblStandardHours As Double = 0 'hold standard hours worked in a day which is always equal to 8
    Dim dblOtHours As Double = 0 ' to hold ot hours worked which is dblHoursWorked minus 8 then minus 4 if amount is greater than 4
    Dim dblOtCache As Double = 0 ' to hold variable for OT hours over 4
    Dim dblDtHours As Double = 0 'to hold dt hours worked which is ot hours minus 4 if ot is greater than 4
    Dim dblStandardPay As Double = 0 'to hold standard pay rate which is always <=8
    Dim dblOtPayRate As Double = 0 'to hold ot pay rate which is dblHourlyPayRate/2 + dblHourlyPayRate
    Dim dblDtPayRate As Double = 0 'to hold dt pay rate which is dblHourlyPayRate*2
    Dim dblOtPay As Double = 0 'Calcuate OT pay
    Dim dblDtPay As Double = 0 'Calculate DT pay
    Dim dblGrossPay As Double = 0 'to hold gross pay

    'making labels visible
    Label2.Visible = True
    Label6.Visible = True
    lblPrintOtRate.Visible = True
    lblPrintDtRate.Visible = True

    'Read the values from text box controls
    dblHoursWorked = CDbl(txtHoursWorked.Text)

    'Read value from text box controls
    dblHourlyPayRate = CDbl(txtPayRate.Text)

    'Calculate Standard Hours
    If dblHoursWorked >= 8 Then dblStandardHours = 8
    If dblHoursWorked < 8 Then dblStandardHours = dblHoursWorked

    'Display Standard Hours
    lblStandardHours.Text = CStr(dblStandardHours)

    'Calculate OT pay rate
    dblOtPayRate = dblHourlyPayRate / 2 + dblHourlyPayRate

    'calculate dt pay rate
    dblDtPayRate = dblHourlyPayRate * 2

    'Calculate OT hours cache
    dblOtCache = dblHoursWorked - 8

    'Conditional statement for OT hours if OT Cache calculations are below 0
    If dblOtCache <= 0 Then dblOtHours = Nothing

    'calculate ot hours actual if ot is equal to or less than 4
    If dblOtCache <= 4 Then dblOtHours = dblOtCache

    'conditional statements of what to print for ot hours if ot hours are greater than 4
    If dblOtCache > 4 Then dblOtHours = 4
    If dblOtCache > 4 Then dblDtHours = dblOtCache - 4

    'Display OT Hours worked
    lblOtHours.Text = CStr(dblOtHours)

    'Calculate DT Hours
    lblDtHours.Text = CStr(dblDtHours)

    'Calculate Standard Pay
    dblStandardPay = dblStandardHours * dblHourlyPayRate

    'Calculate OT Pay
    dblOtPay = dblOtPayRate * dblOtHours

    'Calculate DT Pay
    dblDtPay = dblDtPayRate * dblDtHours

    'Calculate Gross Pay
    dblGrossPay = dblStandardPay + dblOtPay + dblDtPay

    'Display Gross Pay
    txtTotalDailyPay.Text = "$ " + FormatNumber(CStr(dblGrossPay), 2)

    'Display OT Rate
    lblPrintOtRate.Text = "$ " + FormatNumber("$ " + CStr(dblOtPayRate), 2) + "  per hour"

    'Display OT Rate
    lblPrintDtRate.Text = "$ " + FormatNumber("$ " + CStr(dblDtPayRate), 2) + "  per hour"


End Sub
Private Sub btnCalculate\u Click(发送者作为对象,e作为事件参数)处理btnCalculate。单击
Dim DBLHOURSWORK设置为Double=0'以保持工作时间
Dim dblHourlyPayRate为Double=0'以保持小时工资率
Dim dblStandardHours As Double=0'保持每天工作的标准小时数始终等于8
将dblOtHours设置为Double=0'以保持dblOtHours设置为负8的加班时间,如果数量大于4,则设置为负4
Dim DBLOTCHACHE As Double=0'将变量保持4小时以上
尺寸dblDtHours为Double=0’,以保持工作时数,如果工作时数大于4,则工作时数减去4
将dblStandardPay设置为Double=0'以保持始终为4的标准支付率,然后将dblDtHours=DBLOTCHACHE-4
“显示加班工时
lblOtHours.Text=CStr(dblOtHours)
'计算DT小时
lblDtHours.Text=CStr(dblDtHours)
"计算标准工资",
DBL标准工资=DBL标准小时数*DBL小时工资率
“计算工资
dblOtPay=dblOtPayRate*dblOtHours
“计算工资
dblDtPay=dblDtPayRate*dblDtHours
“计算工资总额
dblGrossPay=dblStandardPay+dblOtPay+dblDtPay
"显示工资总额",
txtTotalDailyPay.Text=“$”+格式编号(CStr(dblGrossPay),2)
'显示加班费率
lblPrintOtRate.Text=“$”+格式编号(“$”+CStr(dblOtPayRate),2)+“每小时”
'显示加班费率
lblPrintDtRate.Text=“$”+格式编号(“$”+CStr(dblDtPayRate),每小时2)+”
端接头

您需要一个IF来查看此行之前的总工作小时数是否>8:
dblOtCache=dblHoursWorked-8
。这也将是一个学习使用调试程序的好机会,就像Puroponix所说的,使用调试程序并逐步完成代码,我相信您将能够找出问题所在。如果不发布您所做的事情和发现的内容。这并非毫无意义,但这是一个很大的变量。这使得它更容易出错,尤其是当它们都以
dbl
开头时。谢谢大家:)我将返回并添加新的IF,看看它是如何工作的。当我计算出固定的代码时,我会发布固定的代码。@Protoix,有没有更好的方法来处理这些变量,使其更流线型,更不容易出错?这只是给他们一个不同的起始缩写的问题吗?