c#使用double时的大数字表示

时间:2013-11-01 13:53:27

标签: c#

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

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并完成的内容。有没有有效的方法使这项工作正常?我尝试使用double的字符串instad,但它的工作太慢..

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

正如其他答案所示,存储的内容不完全是输入的数字,但是可以表示的最接近的双值。

如果您想检查所有数字,请使用F0作为format string

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

答案 2 :(得分:0)

你可以在Decimal中存储一个更大的数字,因为它是一个128位的数字,而不是一个Double的64位。

但显然仍有限制。