【问题标题】:Can't convert string to int: 'System.FormatException'无法将字符串转换为 int:'System.FormatException'
【发布时间】:2015-06-11 08:07:27
【问题描述】:

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

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();

【问题讨论】:

  • 你有没有看过 mathString 是什么?如果 2^1000 大于 32 但 int 可以处理,我很确定,所以我不确定类型转换会做什么,但可能不是你想要的。
  • 你不应该使用BigInteger吗?

标签: c#


【解决方案1】:

您回答了自己的问题。 int 最多只能存储 2147483648 的数字,而 unsigned int 最多只能存储 4294967296。尝试使用 ulong 代替。我不确定这一点,但也许签名长可能会起作用。

编辑:实际上,在 msdn 页面中它是这样说的:

如果整数字面量表示的值超出了ulong的范围,就会出现编译错误。

所以你可能需要一个双倍的。

【讨论】:

    【解决方案2】:

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

    因此,您的列表中最终会包含 11 项,第一项是“-”。

    您不能将减号转换为 int。

    【讨论】:

    • 对错误的良好解释...修复“返回 -2147483648”以与 @GrantWinney 备注保持一致会更好。
    • 这与答案无关吗?我的意思是,如果他将 -1 分配给数学,他会得到同样的异常。
    【解决方案3】:

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

    数学.Pow 返回一个双精度值,当您想将其转换为 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位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-10
      • 2020-12-12
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多