Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于大的数字,Parse返回8_C#_Parsing_Floating Point - Fatal编程技术网

C# 对于大的数字,Parse返回8

C# 对于大的数字,Parse返回8,c#,parsing,floating-point,C#,Parsing,Floating Point,这段代码适用于常规数字,但如果我开始输入大得离谱的数字,则返回值为8。我希望OverFlowException捕捉到的数字太大。它不应该抓住他们吗 如果我输入: 50000000000000000000000000000000 我得到了5E+37这样的值,我认为这与精度有关,但我希望是这样。但如果长一个数字,它只返回8。我认为这是因为它太大了,但我认为tryCatch中的OverflowException应该捕获它,不是吗?首先,代码(float.Parse)和问题(Int.Parse)之间存在

这段代码适用于常规数字,但如果我开始输入大得离谱的数字,则返回值为8。我希望OverFlowException捕捉到的数字太大。它不应该抓住他们吗

如果我输入:

50000000000000000000000000000000


我得到了5E+37这样的值,我认为这与精度有关,但我希望是这样。但如果长一个数字,它只返回8。我认为这是因为它太大了,但我认为tryCatch中的OverflowException应该捕获它,不是吗?

首先,代码(
float.Parse
)和问题(
Int.Parse
)之间存在差异

无论是哪种情况,您都应该在这里使用十进制而不是浮点

请特别注意二进制浮点类型和十进制浮点类型之间的差异。十进制数据类型很可能就是您在这里寻找的,因为float没有足够的有效数字来存储您试图准确解析的数字


浮点数的“整数”部分为20位,小数部分为3位(当您将其最大化为>=24位时)

你是在问解析int还是float?你的标题是一个,代码是另一个。如果你在使用浮点运算,欢迎来到浮点数学的不确定性:我把你的代码放进去,500000000000000000000000000000000抛出OverflowException。这是你的全部密码吗?还有,为什么要再次解析它而不是返回“amount”?到目前为止,您使用的是哪个.NET版本?根据具体情况,您可能会得到异常(在.NET Core 3.x和.NET Fw之前的版本)或无穷大值(.NET Core 3.x)这如何解释代码生成8的原因?这并不能回答问题。这应该是评论而不是回答。
        Console.WriteLine("Amount Spent (0.00):");
        float amount;
        string amountString;
        bool repeat = false;
        do
        {
            repeat = false;
            amountString = Console.ReadLine();
            try
            {
                amount = float.Parse(amountString);
            }
            catch (FormatException)
            {
                Console.WriteLine("Numeric Value Required.");
                repeat = true;
            }
            catch (OverflowException)
            {
                Console.WriteLine("Number too large/small for float.");
                repeat = true;
            }
            catch (Exception)
            {
                Console.WriteLine("Invalid Input.");
                repeat = true;
            }
        } 
        while (repeat);
        return float.Parse(amountString);