无法将字符串转换为int:'System.FormatException'

时间:2015-06-10 23:35:32

标签: c#

我在将字符串转换为整数时遇到问题,我的程序在此行上失败

int newS = int.Parse(s);

留言:

  

mscorlib.dll中发生未处理的“System.FormatException”类型异常

我期待从我的计划中回来的数字相当大。以下是总计划:

int math = (int)Math.Pow(2,1000);
string mathString = math.ToString();

List<string> list = new List<string>();

char[] ch = mathString.ToCharArray();
int result = 0;

foreach (char c in mathString)
{
    string newC = c.ToString();
    list.Add(newC);
    //Console.WriteLine(newC);
}

foreach (string s in list)
{
    int newS = int.Parse(s);
    result += newS;

}

Console.Write(result);
Console.ReadLine();

3 个答案:

答案 0 :(得分:0)

你回答了自己的问题。 int只能存储最大为2147483648的数字和一个最多为4294967296的无符号int。尝试使用ulong。我不确定这一点,但也许签名的长期可能有用。

编辑:实际上,在msdn页面中它说:

  

如果整数文字表示的值超出ulong的范围,则会发生编译错误。

所以你可能需要一双。

答案 1 :(得分:0)

Math.Pow(2,1000)返回 -2147483648

因此,您最终会在列表中找到11个项目,第一个项目为“ - ”。

您无法将减号转换为int。

答案 2 :(得分:0)

在所有类型的所有语言中都限制了可以保存的数字。 c#的int是-2,147,483,648到2,147,483,647。 https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx

Math.Pow 返回一个double,当你想将它强制转换为int时,你的变量得到值0

Math.Pow(2,1000)返回:1.07150860718627E + 301。

如果你使用双重格式,你会尝试施放。和E和+,这不是一个int然后你不能使用int来保存它。

返回此处回答的FormatException: int.Parse, Input string was not in a correct format

也许你可以试试这个:

int newS;

if(!int.TryParse(Textbox1.Text,out newS))newS = 0;

结果+ = newS;

但不会使用2 ^ 1000解决方案的301位数。