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