0

我有这个程序,它从一个双变量中获取所有数字,删除小数点和减号,并分别添加每个数字。这是:

static void Main(string[] args)
    {

            double input = double.Parse(Console.ReadLine());

                char[] chrArr = input.ToString().ToCharArray();

                input = 0;

                foreach (var ch in chrArr)
                {
                    string somestring = Convert.ToString(ch);
                    int someint = 0;
                    bool z = int.TryParse(somestring, out someint);
                    if (z == true)
                    {
                        input += (ch - '0');
                    }
                }

问题是,例如,当我输入“9999999999999999999999999999999....”等时,它被表示1.0E+254为什么,所以我的程序只是添加1+0+2+5+4和完成。有没有有效的方法可以使这项工作正常进行?我尝试使用 string instad of double,但它工作得太慢了..

4

3 回答 3

6

您不能存储"9999999999999999999999999999999..."为双精度 - adouble只有 15 或 16 位精度。编译器为您提供了它可以代表您所要求的最接近的双精度,即1E254.

我会研究为什么使用string很慢,或者使用BigInteger

于 2013-11-01T13:56:40.187 回答
3

正如其他答案所表明的那样,存储的内容不会完全是输入的数字,而是可以表示的最接近的双精度值。

但是,如果您想检查所有数字,F0请用作格式字符串

char[] chrArr = input.ToString("F0").ToCharArray();
于 2013-11-01T13:59:35.840 回答
0

您可以在 Decimal 中存储更大的数字,因为与 Double 的 64 位相比,它是 128 位数字。

但显然还是有限制的。

于 2013-11-01T13:57:43.797 回答