Input string was not in a correct format
我是一个新的C语言,我有一些基本的Java知识,但是我不能让这个代码正常运行。
它只是一个基本的计算器,但当我运行程序vs2008时,会出现以下错误:
我做了几乎相同的程序,但在JAVA中使用jSnand,它工作得很好。
这是C的形式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace calculadorac { public partial class Form1 : Form { int a, b, c; String resultado; public Form1() { InitializeComponent(); a = Int32.Parse(textBox1.Text); b = Int32.Parse(textBox2.Text); } private void button1_Click(object sender, EventArgs e) { add(); result(); } private void button2_Click(object sender, EventArgs e) { substract(); result(); } private void button3_Click(object sender, EventArgs e) { clear(); } private void add() { c = a + b; resultado = Convert.ToString(c); } private void substract() { c = a - b; resultado = Convert.ToString(c); } private void result() { label1.Text = resultado; } private void clear() { label1.Text =""; textBox1.Text =""; textBox2.Text =""; } } |
有什么问题?有办法解决吗?
附:我也试过了
1 2 | a = Convert.ToInt32(textBox1.text); b = Convert.ToInt32(textBox2.text); |
但它不起作用。
错误意味着您试图从中分析整数的字符串实际上不包含有效的整数。
在创建表单时,文本框不太可能立即包含有效的整数,而这正是您获取整数值的地方。更新按钮单击事件中的
我遇到了这个确切的异常,只是它与解析数字输入无关。所以这不是对OP问题的回答,但我认为分享知识是可以接受的。
我声明了一个字符串,并对其进行格式化以用于需要大括号()的jqtree。您必须使用双大括号才能接受为格式正确的字符串:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | string measurements = string.empty; measurements += string.Format(@" {{label: 'Measurement Name: {0}', children: [ {{label: 'Measured Value: {1}'}}, {{label: 'Min: {2}'}}, {{label: 'Max: {3}'}}, {{label: 'Measured String: {4}'}}, {{label: 'Expected String: {5}'}}, ] }},", drv["MeasurementName"] == null ?"NULL" : drv["MeasurementName"], drv["MeasuredValue"] == null ?"NULL" : drv["MeasuredValue"], drv["Min"] == null ?"NULL" : drv["Min"], drv["Max"] == null ?"NULL" : drv["Max"], drv["MeasuredString"] == null ?"NULL" : drv["MeasuredString"], drv["ExpectedString"] == null ?"NULL" : drv["ExpectedString"]); |
希望这能帮助其他人找到这个问题,但不分析数字数据。
如果不明确验证文本字段中的数字,则最好使用
1 2 | int result=0; if(int.TryParse(textBox1.Text,out result)) |
现在,如果结果是成功的,那么您可以继续进行计算。
问题
出现错误的可能原因有:
因为
因为
- a)非数字(除开头/结尾的
space 、开头的- )和/或 - b)代码的应用区域性中的千个分隔符,未指定
NumberStyles.AllowThousands 或指定NumberStyles.AllowThousands 但在区域性中输入了错误的thousand separator 和/或 - c)十进制分隔符(不应存在于
int 解析中)
不正常示例:
案例1
1 2 3 | 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 |
案例2 A)
1 2 3 | 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 |
案例2 B)
1 2 3 | 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 |
案例2 C)
1 2 | NumberStyles styles = NumberStyles.AllowDecimalPoint; a = Int32.Parse("1.189", styles); //wrong, int parse cannot parse decimal point at all! |
看似不好,但实际上好的例子:
案例2 A)OK
1 2 | a = Int32.Parse("-189"); //having - but in the beginning b = Int32.Parse(" 189"); //having space, but in the beginning or end |
案例2 B)OK
1 2 3 | 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 |
解决
在所有情况下,请使用Visual Studio调试器检查
1 | 1234 |
另外,你可以考虑
检查EDOCX1[13]的结果,如果不是EDOCX1[16]则处理。
1 2 3 4 5 | int val; bool result = int.TryParse(textbox1.Text, out val); if (!result) return; //something has gone wrong //OK, continue using val |
在我的情况下,我忘记了放双花括号逃跑。{{MyObjult}}
您没有提到您的文本框是否在设计时或现在具有值。当窗体初始化时,如果在窗体设计期间未将文本框放入文本框,则文本框可能不具有值。通过在desgin中设置文本属性,可以在表单设计中输入int值,这样应该可以工作。
我有一个类似的问题,我用以下方法解决了:
在下面的代码行中引发了异常(请参见下面用**修饰的文本):
1 2 3 4 5 6 7 8 9 10 | static void Main(string[] args) { double number = 0; string numberStr = string.Format("{0:C2}", 100); **number = Double.Parse(numberStr);** Console.WriteLine("The number is {0}", number); } |
经过一番调查,我意识到问题在于格式化字符串中包含了一个美元符号($),Parse/Tryparse方法无法解决这个问题(即剥离)。因此,使用字符串对象的remove(…)方法,我将行更改为:
1 | number = Double.Parse(numberStr.Remove(0, 1)); // Remove the"$" from the number |
此时,parse(…)方法按预期工作。
这也是我的问题。在我的例子中,我把波斯语号码改成拉丁语号码,它起作用了。在转换之前还要修剪你的绳子。
1 2 3 4 | PersianCalendar pc = new PersianCalendar(); char[] seperator ={'/'}; string[] date = txtSaleDate.Text.Split(seperator); int a = Convert.ToInt32(Persia.Number.ConvertToLatin(date[0]).Trim()); |