An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

51,657

Solution 1

You're converting a number to an integer. So if you entered (say) 9.5 that would fail, because it's not an integer.

You should almost certainly be using decimal.TryParse, noting that the return value will say whether parsing succeeded or not.

decimal userRate;
if (!decimal.TryParse(RateTextBox.Text, out userRate))
{
    // Indicate to the user that the input is invalid, and return from
    // the method
}
// Now use userRate

Solution 2

You will get that error if you type something that's not convertible to an integer, since you used Convert.ToInt32. Try:

if (Convert.ToDecimal(RateTextBox.Text) < 9.75m)

Or, better yet, switch to using decimal.TryParse, which will allow you to easily handle improper input without exception handling.

Share:
51,657
Syntax_Error
Author by

Syntax_Error

Updated on October 15, 2020

Comments

  • Syntax_Error
    Syntax_Error over 3 years

    Every time I hit the calculate button I receive the following message: An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll Additional information: Input string was not in a correct format.

    I'm supposed to display a message when the wage input is below $9.75.

    It then highlights this line of code:

    if (Convert.ToInt32(RateTextBox.Text) < 9.75m)
    

    Here is the Calculate Button method (I'm sure I've made more than one error):

     private void CalcButton_Click(object sender, EventArgs e)
        {  // The “Calculate” button calculates gross pay, taxes, and net pay and then      displays name, department, gross pay, taxes, and net pay using currency format for various amounts in the rich text box
            // Gross pay=  (hours * rate)
            // Taxes= (25% of gross pay)
            // Net pay (gross pay ?taxes)
    
    
    
            //calculate         
    
    
            Gross_pay = Convert.ToInt32(HoursTextBox.Text) * decimal.Parse(RateTextBox.Text);
            Taxes = TAX * Gross_pay;
            Net_Pay = Gross_pay - Taxes;
    
            annual_salary = Net_Pay;
    
    
    
            //display
            DisplayOutPut.Text = "";
            DisplayOutPut.Text += NameTextBox.Text + "\n";
            DisplayOutPut.Text += "Hours:" + HoursTextBox.Text + "\n";
            DisplayOutPut.Text += "Rate:" + RateTextBox.Text + "\n";
            DisplayOutPut.Text += "Gross Pay:" + Gross_pay.ToString("C") + "\n"; // Hours*Rate
            DisplayOutPut.Text += "Taxes:" + Taxes.ToString("C") + "\n";
            DisplayOutPut.Text += "Net Pay:" + Net_Pay.ToString("C");
    
            //handling the invalid inputs
            if (NameTextBox.Text == "")
            { MessageBox.Show("Name is missing.", "Error"); }
    
            if (Convert.ToInt32(HoursTextBox.Text) >= 70)
            { MessageBox.Show("Please Enter a Valid hour.", "Invalid data type."); }
    
            if (RateTextBox.Text == "" && (RateTextBox.Text == ","))
            { MessageBox.Show("Please Enter a valid amount.", "Invalid data type ($)"); }
    
            if (Convert.ToInt32(HoursTextBox.Text) >= 70)
            { MessageBox.Show("You have exceeded the maximum hours per week."); }
    
            else if (Convert.ToInt32(HoursTextBox.Text) < 10)
            { MessageBox.Show("You cannot input less than 10 hours."); }
    
            if (Convert.ToInt32(RateTextBox.Text) < 9.75m)
            { MessageBox.Show("Please enter the minimum wage."); }
    
    
            //overtime pay
            if (Convert.ToInt32(HoursTextBox.Text) >= 41)
            {
                Gross_pay = Convert.ToInt32(HoursTextBox.Text) * decimal.Parse(RateTextBox.Text) * 1.5m;
                DisplayOutPut.Text += "Gross Pay:" + Gross_pay.ToString("C") + "\n";
            }
    
            //Medical/Dental and 401k deductions...as well as tax collected.
            if (MedicalDentalDeductions.Checked)
            {
                Gross_pay = Convert.ToInt32(HoursTextBox.Text) * decimal.Parse(RateTextBox.Text) - 50.00m;
            }
    
        if(FourOneKDeduction.Checked)
        {
            Gross_pay = Convert.ToInt32(HoursTextBox.Text) * decimal.Parse(RateTextBox.Text) - 0.05m * 100;
    
    
        }
    
    
        if ((MedicalDentalDeductions.Checked) && (FourOneKDeduction.Checked))
        { Taxes = TAX * Gross_pay; }
          DisplayOutPut.Text= "Medical/Dental deduction:" + Taxes +"401k deduction:"+ Taxes;
    
        }