繁体   English   中英

未处理的异常 System.OverflowException 值对于 Int32 来说太大或太小

[英]Unhandled exception System.OverflowException Value is either too large or too small for Int32

我在这里有这个C#代码,我想要做的是,当我输入一个包含多位数字的数字时,应用程序会崩溃,我希望它不会崩溃,但我不知道该怎么做,我尝试更改.Parse命令但知道要使用哪个命令。 一个例子是,当我运行应用程序时,我想输入一个像564984894897987878这样的564984894897987878并且我希望应用程序不会崩溃,在这种情况下,有人可以帮助我吗? 如果您找到解决方案,请在此处发布,包括您的代码和我的代码,谢谢?!

        int num;
        Console.Write("Please type your number here:");
        num = Int32.Parse(Console.ReadLine());



        if (num < 0)
            Console.WriteLine("This is a negative number!");

        if (num > 0)
            Console.WriteLine("This number is a positive number");

如果你想表示一个任意大的整数,你应该使用BigInteger

如果您使用int (又名System.Int32 ),您将被限制在 -2147483648 到 2147483647(含)的范围内。

如果您使用long (又名System.Int64 ),您将被限制在 -9223372036854775808 到 9223372036854775807 的范围内。

现在它可能对你来说long - 但是用户仍然可以很容易地使你的应用程序崩溃,或者至少使它不能“按预期”工作。 使用BigInteger您应该可以处理计算机有足够内存可以存储的任何整数值。

您的代码几乎可以轻松转换为使用BigInteger - 只需使用BigInteger.Parse而不是Int32.Parse ,然后与BigInteger.Zero进行比较。 为了进一步改进代码,除了处理大整数之外,您还可以使用BigInteger.TryParse通过优雅地向用户报告这些无效输入来处理无效输入,而不是因FormatException而崩溃。

您可以使用 TryParse:

    Console.Write("Please type your number here:");
    if(!Int32.TryParse(Console.ReadLine(), out num))
        Console.WriteLine("Invalid number");

    if (num < 0)
        Console.WriteLine("This is a negative number!");

    if (num > 0)
        Console.WriteLine("This number is a positive number");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM