C# 如何计算一个非常大的数字数组而不在输出中得到NaN?

C# 如何计算一个非常大的数字数组而不在输出中得到NaN?,c#,.net,calculator,nan,C#,.net,Calculator,Nan,我做了一个计算器,可以计算小数字,但当结果太大时,它会返回NaN List<string> memory = new List<string> { }; string display = ""; while (display.Contains("%") == false) { string line = ReadLine(); display = line; memory.Add(line); } float result = float.Pa

我做了一个计算器,可以计算小数字,但当结果太大时,它会返回NaN

List<string> memory = new List<string> { };

string display = "";
while (display.Contains("%") == false)
{
    string line = ReadLine();
    display = line;
    memory.Add(line);
}

float result = float.Parse(memory[0]);

for (int i = 1; i < memory.Count; i++)
{
    string temp = memory[i];
    char[] _temp = temp.ToCharArray();
    _temp = _temp.Where(x => x > _temp[0]).ToArray();
    float num = float.Parse(string.Join("", _temp));

    if (temp.Contains("+") == true) result += num;
    else if (temp.Contains("-") == true) result -= num;
    else if (temp.Contains("*") == true) result *= num;
    else if (temp.Contains("/") == true) result /= num;
    else if (temp.Contains("%") == true) result %= num;
}
我在一个新的读线中输入每个数字,前面有数学符号。 如果你用这些数字测试它,请注意

我到处都找过了,找不出解决这个问题的方法,所以它可以返回一个真实的数字


有人知道我能做些什么来解决这个问题吗?

以下限制适用:

  • 浮点:7位(32位)
  • 双精度:15-16位(64位)
  • 十进制:28-29位有效数字(128位)

您使用的值对于浮点值来说太大。当该值对于您的浮点值太大时,它将返回正infinity(或负infinity)而不是数字值。根据:

当操作结果大于MaxValue时,返回此常量

所以你的浮点数变成了“无穷大”而不是一个数字

然后,当您尝试像divide或mod这样的操作时,float返回NaN。同样,来自:

当操作结果未定义时,方法或运算符返回NaN

所以当你把你的浮点数(无穷大)除以一个数字,结果是NaN


<>你可能想考虑使用. 请参阅“797*2+38*212”给定您的解析器,我认为您没有考虑关联-797*2应在一侧解析,另一侧加上38*212,并将这两个值相加。我相信你的计算器是从左到右读数,并不认为这是误导
Decimal
的范围比Double小得多,但其范围更精确。
797 * 2 + 38 * 212 * 275 * 806 * 67 * 9939 + 7 + 74 + 515 + 610 * 516 * 6921
+ 4 * 2 * 494 * 3153 * 8 + 2501 * 769 + 4 * 2472 + 1 * 21 * 6535 + 30 + 26
+ 44 + 240 + 88 * 1111 * 817 * 1576 + 551 * 535 + 9150 + 36 * 85 * 4598
* 9276 * 766 + 584 + 5 * 1 + 7 + 45 * 8152 % 7984