2013-11-01 19 views
0

我有這個程序從雙變量中獲取所有數字,刪除小數點和小數點並分別添加每個數字。這裏是: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和完成。有沒有有效的方法來正確地工作?我嘗試使用字符串instad的雙重,但它的作品太慢..

+2

你應該知道'double'將不能保存這個數字。改爲尋找'BigDecimal'。 –

+0

http://stackoverflow.com/questions/1319191/how-to-convert-double-to-string-without-the-power-to-10-representation-e-05 – algreat

+0

可能的重複[Double to string conversion without without科學記數法](http://stackoverflow.com/questions/1546113/double-to-string-conversion-without-scientific-notation) –

回答

6

你不能存儲"9999999999999999999999999999999..."作爲一個雙 - 一個double只有15或16位的精度。編譯器給你最接近的兩倍可以代表你要問什麼,這是1E254

我想看看爲什麼使用string很慢,或者使用BigInteger

0

您可以將較大數量的存儲在一個小數,因爲它是一個128位的數字相比,64位雙精度的。

但是顯然還有一個限制。

3

正如其他答案指出,存儲的內容不會完全是輸入的數字,而是可以表示的最接近的雙倍值。

如果您想檢查它的所有數字,請使用F0作爲format string

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