Solved

Label3.Text = Label1.Text * Label2.Text  -> Input string was not in a correct format

Posted on 2010-09-21
8
443 Views
Last Modified: 2012-05-10
I've been working on this half the day and it's ticking me off.

I've got four text boxes for input.  They are restricted to numeric values only with JavaScript.

Then there are three labels.

Label1 gets its value from TextBox1 * TextBox2
Label2 gets its value from TextBox3 * TextBox4
Label3 gets its valaue from Label1 * Label2

The work is done in the "CalculateButton" click event.

In the last IF/THEN,
If Double.TryParse(lblNumberTrainingHours.Text, 0) Then
is failing, causing tNumber to be zero thus making AmountReimbursed equal zero.

lblNumberTrainingHours.Text contains a correctly calculated value of "140" so I don't know why its failing the Double.TryParse.

This has gotten so convoluted in my efforts to make it calculate those few values and not crash if there are no values to calculate.  It could probably be done more correctly with, like three lines of code.  ;-)
Protected Sub btnRecalculate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRecalculate.Click

        Call UpdateTotals()

    End Sub



    Protected Sub UpdateTotals()

        '##################################################################################From txtTrainingPaymentPercent.TextChanged

        Dim Wage, Percent, Rate As Double

        If Double.TryParse(txtTraineeEntryWage.Text, 0) Then

            'Wage = Double.TryParse(txtTraineeEntryWage.Text, 0)

            Wage = CType(txtTraineeEntryWage.Text, Double)

        Else

            Wage = 0

        End If

        If Double.TryParse(txtTrainingPaymentPercent.Text, 0) Then

            'Percent = Double.TryParse(txtTrainingPaymentPercent.Text, 0)

            Percent = CType(txtTrainingPaymentPercent.Text, Double)

        Else

            Percent = 0

        End If



        Rate = Wage * Percent / 100



        lblTrainingPaymentHourlyRate.Text = Rate.ToString ' txtTraineeEntryWage.Text * txtTrainingPaymentPercent.Text / 100



        '##################################################################################From txtHoursPerWeek.TextChanged

        Dim tWeeks, tHours, tRate, tNumber, TrainingHours, AmountReimbursed As Double

        If Double.TryParse(txtLengthTrainingWeeks.Text, 0) Then

            'tWeeks = Double.TryParse(txtLengthTrainingWeeks.Text, 0)

            tWeeks = CType(txtLengthTrainingWeeks.Text, Double)

        Else

            tWeeks = 0

        End If

        If Double.TryParse(txtHoursPerWeek.Text, 0) Then

            'tHours = Double.TryParse(txtHoursPerWeek.Text, 0)

            tHours = CType(txtHoursPerWeek.Text, Double)

        Else

            tHours = 0

        End If

        If Double.TryParse(lblTrainingPaymentHourlyRate.Text, 0) Then

            'tRate = Double.TryParse(lblTrainingPaymentHourlyRate.Text, 0)

            tRate = CType(lblTrainingPaymentHourlyRate.Text, Double)

        Else

            tRate = 0

        End If

        If Double.TryParse(lblNumberTrainingHours.Text, 0) Then

            'tNumber = Double.TryParse(lblNumberTrainingHours.Text, 0)

            tNumber = CType(lblNumberTrainingHours.Text, Double)

        Else

            tNumber = 0

        End If



        TrainingHours = tWeeks * tHours

        AmountReimbursed = tRate * tNumber



        lblNumberTrainingHours.Text = TrainingHours.ToString ' tHours * tWeeks ' txtLengthTrainingWeeks.Text * txtHoursPerWeek.Text

        lblMaxAmountReimbursed.Text = AmountReimbursed.ToString ' tRate * tNumber ' lblTrainingPaymentHourlyRate.Text * lblNumberTrainingHours.Text





    End Sub

Open in new window

0
Comment
Question by:megnin
  • 4
  • 4
8 Comments
 
LVL 74

Expert Comment

by:käµfm³d 👽
ID: 33727946
You appear to be using TryParse incorrectly. The second parameter to TryParse is a reference paramter. If TryParse succeeds, then the ref parameter will already have the value as a double stored in it--there is no need to cast it using CType. Here is an example:
Dim value As String = "43.5"
Dim result As Double

If Double.TryParse(value, result) Then
    ' TryParse succeeded and result now is the double value 43.5. No cast required.
End If

Open in new window

0
 
LVL 1

Author Comment

by:megnin
ID: 33727986
Yes, I see.  Just goes to show, just because you "Google" something doesn't mean it's correct.  ;-)
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
ID: 33728038
>>  just because you "Google" something doesn't mean it's correct

That's what EE is for  ;)
0
 
LVL 1

Author Comment

by:megnin
ID: 33728096
I've got it like this now and it works:
If Double.TryParse(txtTraineeEntryWage.Text, Wage) Then
  ' Wage = CType(txtTraineeEntryWage.Text, Double)
Else
Wage = 0
End If
If I just say,
Double.TryParse(txtTraineeEntryWage.Text, Wage)
and the TryParse fails what with the value of Wage be?
Should I do this?
Dim Wage As Double = 0
Then if it fails will it just be "0"?
0
Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

 
LVL 74

Accepted Solution

by:
käµfm³d   👽 earned 500 total points
ID: 33728174
I think this will suit you and clarify:
Dim Wage As Double

If Not Double.TryParse(value, Wage) Then
    ' TryParse failed. Set value equal to zero
    Wage = 0
End If

' If TryParse succeeds, then the "If" is never entered. Because the
'  second param to TryParse is ByRef, Wage will already be set if
'  TryParse succeeds. If TryParse fails, then the "If" is entered
'  and Wage is set to zero

Open in new window

0
 
LVL 1

Author Comment

by:megnin
ID: 33728248
Thank you for the explanation.  That helps.
0
 
LVL 1

Author Closing Comment

by:megnin
ID: 33728261
Thank you for making it easy to understand.
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
ID: 33728605
NP. Glad to help  :)
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

I recently went through the process of creating a Calendar Control of events with the basis of using a database to keep track of the dates that are selectable, one requirement was to have the selected date pop-up in a simple lightbox.  At first this…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now