2016-10-17 16 views
3

我想將一些Java代碼轉換爲C#,並在解析.NET中非常大的指數數字時遇到了一個問題。在.NET中解析一個大的指數數字

我試圖解析的數字是"1.79769313486232E+308"

我已經嘗試使用雙(這是我翻譯的代碼中使用的是什麼)和十進制,但都拋出溢出異常,數量太大。

double result = double.Parse("1.79769313486232E+308", 
    System.Globalization.NumberStyles.Float, 
    System.Globalization.CultureInfo.InvariantCulture) 

我也嘗試過各種其他組合,例如使用NumberStyles.Any

這在Java中工作正常。但在我嘗試轉換code from Java之前,我希望.NET中有另一個(本機)選項。有任何想法嗎?

+0

它看起來像這段代碼是指最大可能的'double'值,那麼爲什麼不使用'double.MaxValue'呢? –

回答

3
System.Numerics.BigInteger result = System.Numerics.BigInteger.Parse("1.79769313486232E+308", System.Globalization.NumberStyles.Float); 

你可以嘗試BigInteger你應該在你的項目中添加System.Numerics參考

編輯

Bec如果使用註釋,則當前數字可以由int(而不丟失任何信息)表示,因爲它本身是整數。這是科學記數法,所以這是如何翻譯的。舉一個例子:

1.23E+11 or as 1.23 X 10^11 

所以,在他的案件:

1.79769313486232E+308 = 1.79769313486232*10^308 

從雙界限路程,可以寫成的BigInteger。數字是整數本身,所以沒有問題!

+0

它解析成BigInteger的罰款,但是當我將它重新轉換爲double時,它變成了「Infinity」而不是我正在查找的數字。 – NightOwl888

+0

沒關係。這是因爲我在某處失去了精確性(某些代碼在轉換爲字符串時顯然沒有使用「R」(往返)選項,因此它超出了雙精度範圍 - 我認爲這將會如果我可以找到其他代碼 – NightOwl888

+1

是的,你超出了雙倍範圍 – mybirthname

0

因爲它太大了。

雙人間最多可容納: 1.7976931348623157E + 308

參見:this

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [發表評論](/ review/low-quality-posts/14004444) –

+0

我已經回答了問題中提到的問題: – Emad

+0

問題是double.parse引發「溢出異常」,這是因爲有問題的數字是大於double.maxvalue。我說的話有什麼不對嗎,因爲我想知道是否有。 – Emad

相關問題