Input string was not in a correct format

后端 未结 8 1203
滥情空心
滥情空心 2020-11-22 02:55

I\'m new with C#, I have some basic knowledge in Java but I can\'t get this code to run properly.

It\'s just a basic calculator, but when I run the program VS2008 gi

8条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-22 03:23

    Problems

    There are some possible cases why the error occurs:

    1. Because textBox1.Text contains only number, but the number is too big/too small

    2. Because textBox1.Text contains:

      • a) non-number (except space in the beginning/end, - in the beginning) and/or
      • b) thousand separators in the applied culture for your code without specifying NumberStyles.AllowThousands or you specify NumberStyles.AllowThousands but put wrong thousand separator in the culture and/or
      • c) decimal separator (which should not exist in int parsing)

    NOT OK Examples:

    Case 1

    a = Int32.Parse("5000000000"); //5 billions, too large
    b = Int32.Parse("-5000000000"); //-5 billions, too small
    //The limit for int (32-bit integer) is only from -2,147,483,648 to 2,147,483,647
    

    Case 2 a)

    a = Int32.Parse("a189"); //having a 
    a = Int32.Parse("1-89"); //having - but not in the beginning
    a = Int32.Parse("18 9"); //having space, but not in the beginning or end
    

    Case 2 b)

    NumberStyles styles = NumberStyles.AllowThousands;
    a = Int32.Parse("1,189"); //not OK, no NumberStyles.AllowThousands
    b = Int32.Parse("1,189", styles, new CultureInfo("fr-FR")); //not OK, having NumberStyles.AllowThousands but the culture specified use different thousand separator
    

    Case 2 c)

    NumberStyles styles = NumberStyles.AllowDecimalPoint;
    a = Int32.Parse("1.189", styles); //wrong, int parse cannot parse decimal point at all!
    

    Seemingly NOT OK, but actually OK Examples:

    Case 2 a) OK

    a = Int32.Parse("-189"); //having - but in the beginning
    b = Int32.Parse(" 189 "); //having space, but in the beginning or end
    

    Case 2 b) OK

    NumberStyles styles = NumberStyles.AllowThousands;
    a = Int32.Parse("1,189", styles); //ok, having NumberStyles.AllowThousands in the correct culture
    b = Int32.Parse("1 189", styles, new CultureInfo("fr-FR")); //ok, having NumberStyles.AllowThousands and correct thousand separator is used for "fr-FR" culture
    

    Solutions

    In all cases, please check the value of textBox1.Text with your Visual Studio debugger and make sure that it has purely-acceptable numerical format for int range. Something like this:

    1234
    

    Also, you may consider of

    1. using TryParse instead of Parse to ensure that the non-parsed number does not cause you exception problem.
    2. check the result of TryParse and handle it if not true

      int val;
      bool result = int.TryParse(textbox1.Text, out val);
      if (!result)
          return; //something has gone wrong
      //OK, continue using val
      

提交回复
热议问题